model 和WEB前台页面提交完美自动填充
代码如下
一、请求页面代码
try
{
NameValueCollection pColl = context.Request.Params;
BodyKnow.Model.MPoll_Topic model = new BodyKnow.Model.MPoll_Topic();
BodyKnow.COMP.PageUtil.GetParamsValue(pColl, model);
BodyKnow.Logic.Poll_Topic dal = new BodyKnow.Logic.Poll_Topic();
dal.Update (model); //更新数据
log.Info("修改主题 id=" + model.TopicID );
}
catch (Exception ex)
{
log.Error(ex.Message);
}
二、页面填充函数代码
/// <summary>
/// 页面参数填充model
/// </summary>
/// <param name="pColl">参数</param>
/// <param name="m">model对象</param>
public static void GetParamsValue(NameValueCollection pColl, object m)
{
for (int i = 0; i <= pColl.Count - 1; i++)
{
PropertyInfo pi = m.GetType().GetProperty(pColl.GetKey(i));
if (pi != null)
{
string[] pValues = pColl.GetValues(i);
for (int j = 0; j <= pValues.Length - 1; j++)
{
ConvertibleString cstring = new ConvertibleString(pValues[j].ToString ());
object value = Convert.ChangeType(cstring,pi.PropertyType);
pi.SetValue(m, value, null);
}
}
}
}
三、实现数据类型自动转换类型接口 ConvertibleString
using System;
using System.Collections.Generic;
using System.Text;
namespace BodyKnow.COMP
{
class ConvertibleString:IConvertible
{
string x;
public ConvertibleString(string value)
{
this.x = value;
}
public TypeCode GetTypeCode()
{
return TypeCode.Object;
}
bool IConvertible.ToBoolean(IFormatProvider provider)
{
if ((x != "") )
return true;
else
return false;
}
double GetDoubleValue()
{
return 0;
}
byte IConvertible.ToByte(IFormatProvider provider)
{
return Convert.ToByte(GetDoubleValue());
}
char IConvertible.ToChar(IFormatProvider provider)
{
return Convert.ToChar(GetDoubleValue());
}
DateTime IConvertible.ToDateTime(IFormatProvider provider)
{
return Convert.ToDateTime(x);
}
decimal IConvertible.ToDecimal(IFormatProvider provider)
{
return Convert.ToDecimal(GetDoubleValue());
}
double IConvertible.ToDouble(IFormatProvider provider)
{
return GetDoubleValue();
}
short IConvertible.ToInt16(IFormatProvider provider)
{
return Convert.ToInt16(GetDoubleValue());
}
int IConvertible.ToInt32(IFormatProvider provider)
{
return Convert.ToInt32(GetDoubleValue());
}
long IConvertible.ToInt64(IFormatProvider provider)
{
return Convert.ToInt64(GetDoubleValue());
}
sbyte IConvertible.ToSByte(IFormatProvider provider)
{
return Convert.ToSByte(GetDoubleValue());
}
float IConvertible.ToSingle(IFormatProvider provider)
{
return Convert.ToSingle(GetDoubleValue());
}
string IConvertible.ToString(IFormatProvider provider)
{
return x.ToString();
}
object IConvertible.ToType(Type conversionType, IFormatProvider provider)
{
return Convert.ChangeType(GetDoubleValue(), conversionType);
}
ushort IConvertible.ToUInt16(IFormatProvider provider)
{
return Convert.ToUInt16(GetDoubleValue());
}
uint IConvertible.ToUInt32(IFormatProvider provider)
{
return Convert.ToUInt32(GetDoubleValue());
}
ulong IConvertible.ToUInt64(IFormatProvider provider)
{
return Convert.ToUInt64(GetDoubleValue());
}
}
}

浙公网安备 33010602011771号