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());
       }

    }
}

 

 

 

posted @ 2010-04-08 14:57  heshangwen  阅读(634)  评论(0编辑  收藏  举报