当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  Asp.net下的对象成员数据绑定器实现 1

 Asp.net下的对象成员数据绑定器实现 1

点击次数:16 次 发布日期:2008-11-26 12:01:23 作者:源代码网
源代码网推荐      用过MonoRail的朋友应该知道它提供的对象成员数据绑定功能非常方便,通过标记参数属性或方法就可以自动把提交回来的数据和对象成员进行绑定;有了这些方便的功能的确可以节省大量的set代码。不过这些功能只是MonoRail提供,于是实现类似的功能方便自己开发。
源代码网推荐  
源代码网推荐  实现目标:
源代码网推荐   可以灵活方便地实现数据绑定。
源代码网推荐  
源代码网推荐   OrderSearch search = FormContext.BindObject<OrderSearch>();
源代码网推荐  
源代码网推荐   Orders order = FormContext.BindObject<Orders>("order");
源代码网推荐  
源代码网推荐  制定规则和约束
源代码网推荐   首先确定WEB提交的数据和成员属性的映射关系,可以通过名称约定的方式:
源代码网推荐  
源代码网推荐   <input id="Text1" name="companyname" type="text" />
源代码网推荐  
源代码网推荐   xxxx.LastName、xxxx_LastName或xxxxLastName等。在绑过程可以指定前缀进行对象成员的绑定;不过在webForm控件的Name是asp.net生成的,在关系分析上就相对复杂些。
源代码网推荐  
源代码网推荐   类型转换接口的定义
源代码网推荐  因为转换的情况是很难确定;除了。NET的基础类型外实际应用中还会存在其他转换方式,如:HttpPostedFile到byte[],序列化String到Object等。因此制定转换接口就可以方便实现可扩展和可配置。
源代码网推荐  
源代码网推荐   public interface IStringConverter
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   object ConvertTo(string value, out bool succeeded);
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐  由于Web提供的数据大部份是以string的方式提供,因此定义一个基于string转换描述。基于接口的实也很简单:
源代码网推荐  
源代码网推荐   public class ToSbyte :IStringConverter
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   #region IStringConverter 成员
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   object IStringConverter.ConvertTo(string value, out bool succeeded)
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   sbyte nvalue;
源代码网推荐  
源代码网推荐   succeeded = sbyte.TryParse(value, out nvalue);
源代码网推荐  
源代码网推荐   return nvalue;
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   #endregion
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  IStringConverter工厂的实现
源代码网推荐   由于转换情况的不确定性,因此通过工厂的方式来达到代码对外的封闭性和良好的扩展性。可以通过目标类型来获取相关转换实例,在.NET中IDictionary就能够达到应用的要求。
源代码网推荐  
源代码网推荐   static IDictionary<Type, IStringConverter> mConverters;
源代码网推荐  
源代码网推荐   public static IDictionary<Type, IStringConverter> Converters
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   get
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   if (mConverters == null)
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   lock (typeof(ConverterFactory))
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   OnInit();
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   return mConverters;
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   static void OnInit()
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   if (mConverters != null)
源代码网推荐  
源代码网推荐   return;
源代码网推荐  
源代码网推荐   mConverters = new Dictionary<Type, IStringConverter>();
源代码网推荐  
源代码网推荐   mConverters.Add(typeof(byte), new ToByte());
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   LoadConfig();
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   //从配置文件加载转换器映射,如果配置存在相同类型转器就取代原有转换器
源代码网推荐  
源代码网推荐   static void LoadConfig()
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   //Load Config
源代码网推荐  
源代码网推荐   // <converter type="System.Int32",value="HFSoft.Binder.ToByte"
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐  为了方便使用可以在工厂中硬编码配置内部基础类型;因为转换情况的不确定,所以允许通过配置文件的方式引入不同情况的类型转换器。
源代码网推荐  
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华