网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

通过User Control生成HTML

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
ol.GetType());
foreach (var property in metadata.Keys)
{
object value = GetValue(metadata[property], context) ?? GetDefaultValue(property);
if (value != null)
{
property.SetValue(control, Convert.ChangeType(value, property.PropertyType), null);
}
}
}

SetPropertyValues方法中会调用三个方法:GetMetadata,GetValue和GetDefaultValue。GetMetadata方法会得到关于这个control的元数据,为PropertyInfo - List<UserControlRenderingPropertyAttribute>的键值对(即Dictionary)。然后将metadata传入GetValue方法,以获取由UserControlRenderingPropertyAttribute标记的值。如果GetValue方法返回null,则调用GetDefaultValue方法获取标记在该属性上DefaultValueAttribute。以下就将其余代码附上,没有技术含量,但做一参考:

[展开代码]

private static Dictionary<
Type,
Dictionary<
PropertyInfo,
List<UserControlRenderingPropertyAttribute>>> s_metadataCache =
new Dictionary<
Type,
Dictionary<
PropertyInfo,
List<UserControlRenderingPropertyAttribute>>>();
private static Dictionary<PropertyInfo, object> s_defaultValueCache =
new Dictionary<PropertyInfo,object>();
private static object s_mutex = new object();

private static Dictionary<
PropertyInfo,
List<UserControlRenderingPropertyAttribute>> GetMetadata(Type type)
{
if (!s_metadataCache.ContainsKey(type))
{
lock (s_mutex)
{
if (!s_metadataCache.ContainsKey(type))
{
s_metadataCache[type] = LoadMetadata(type);
}
}
}

return s_metadataCache[type];
}

private static Dictionary<
PropertyInfo,
List<UserControlRenderingPropertyAttribute>> LoadMetadata(Type type)
{
var result = new Dictionary<PropertyInfo, List<UserControlRenderingPropertyAttribute>>();
PropertyInfo properties = type.GetProperties(
BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty);

foreach (var p in properties)
{
var attributes = p.GetCustomAttributes(
typeof(UserControlRenderingPropertyAttribute), true);
if (attributes.Length > 0)
{
result[p] = new List<UserControlRenderingPropertyAttribute>(
attributes.Cast<UserControlRenderingPropertyAttribute>());
}
}

return result;
}

private static object GetDefaultValue(PropertyInfo property)
{
if (!s_defaultValueCache.ContainsKey(property))
{
lock (s_mutex)
{
if (!s_defaultValueCache.ContainsKey(property))
{
var attributes = property.GetCustomAttributes(typeof(DefaultValueAttribute), true);
object value = attributes.Length > 0 ?
((DefaultValueAttribute)attributes[0]).Value : null;
s_defaultValueCache[property] = value;
}
}
}

return s_defaultValueCache[property];
}

private static void SetPropertyValues(UserControl control, HttpContext context)
{
var metadata = GetMetadata(control.GetType());
foreach (var property in metadata.Keys)
{
object value = GetValue(metadata[property], context) ?? GetDefaultValue(property);
if (value != null)
{
property.SetValue(control, Convert.ChangeType(value, property.PropertyType), null);
}
}
}

private static object GetValue(
IEnumerable<UserControlRenderingPropertyAttribute> metadata,

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号