我正在为ASP.NET编写一个TwoWay Binding控件。我终于把事情搞定了。我正在使用以下代码重新绑定:
private void RebindData()
{
// return if the DataValue wasn't loaded from ViewState
if (DataValue == null)
return;
// extract the values from the two-way binding template
IOrderedDictionary values = new OrderedDictionary();
IBindableTemplate itemTemplate = DataTemplate as IBindableTemplate;
if (itemTemplate != null)
{
foreach (DictionaryEntry entry in itemTemplate.ExtractValues(this))
{
values[entry.Key] = entry.Value;
}
}
// use reflection to push the bound fields back to the datavalue
foreach(var key in values.Keys)
{
var type = typeof(T);
var pi = type.GetProperty(key.ToString());
if (pi != null)
{
pi.SetValue(DataValue, values[key], null);
}
}
}
这适用于这样的简单案例:
<%# Bind("Name") %>
当我有这样的嵌套绑定语句时,我正在使用的反射技术不起作用:
<%# Bind("Customer.Name") %>
对于像这样的嵌套属性,是否有一种简单的方法可以使用反射?我应该为此使用递归函数,还是只使用循环?
答案 0 :(得分:1)
为什么不使用已支持此功能的ASP.NET DataBinder?