Asp.net下的对象成员数据绑定器实现 1
点击次数:16 次 发布日期:2008-11-26 12:01:23 作者:源代码网
|
源代码网推荐 源代码网推荐 实现目标: 源代码网推荐 可以灵活方便地实现数据绑定。 源代码网推荐 源代码网推荐 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)。 源代码网推荐 源代码网供稿. |
