我建立了一个拥有公共属性string[] foo
的用户控件。将非基元值分配给用户控件属性?
是否可以在实际标记中分配此值?
项目的类型是ASP.NET webforms/web应用程序。
我试过下面的语法,但它不起作用:(它编译但值从未分配)。
<abc:MyControl runat="server" foo='<%# new string[]{"Hello"} %>' />
我建立了一个拥有公共属性string[] foo
的用户控件。将非基元值分配给用户控件属性?
是否可以在实际标记中分配此值?
项目的类型是ASP.NET webforms/web应用程序。
我试过下面的语法,但它不起作用:(它编译但值从未分配)。
<abc:MyControl runat="server" foo='<%# new string[]{"Hello"} %>' />
我从来没有见过这样的事情之前,通常用于数组我做这样的事情:
<abc:MyControl runat="server" foo="This,Is,A,Test" />
public string foo {
get;
set;
}
public string[] foos {
get { return foo.Split(','); }
//set; if needed
}
您可能会发现PersistenceMode(PersistenceMode.InnerProperty)
是感兴趣的。 PersistenceMode
属性允许您创建具有嵌套属性的属性。请注意,在这种情况下,您的aspx代码将使用嵌套元素而不是属性,因为元素只能存储字符串。
在这种情况下,你会做这样的事情:
<abc:MyControl runat="server" >
<foo>
<element value="1" />
<element value="2" />
</foo>
</abc:MyControl>
数据绑定语法只是一个简写。
<abc:MyControl runat="server" ID="control1" foo='<%# new string[]{"Hello"} %>' />
是
<abc:MyControl runat="server" ID="control1" OnDatabinding="Databind_control1" />
protected void Databind_control1(object sender, EventArgs e)
{
((MyControl) sender).foo = new string[]{"Hello"};
}
速记尝试这种方式,看看它是否工作。
有趣。我没有检查,但我认为只有在控件实现了某个接口后才调用DataBinding事件? – maxp 2011-02-02 16:59:06