我们如何将枚举值绑定(bind)到 Web 用户控件的属性?我不断收到此错误。
Cannot create an object of type 'MyEnum' from its string representation 'MyEnum.MyValue' for the 'MyProperty' property.
这是 MyWebUserControl.ascx.cs 背后的代码
[System.ComponentModel.Bindable(true)]
public MyEnum MyProperty { get; set; }
SomeWebUserControl.ascx
<!-- This fails -->
<uc1:MyWebUserControl runat="server" ID="MyControl1"
MyProperty="MyEnum.MyValue" />
<!-- This fails -->
<uc1:MyWebUserControl runat="server" ID="MyControl2"
MyProperty="<%# MyEnum.MyValue %>" />
<!-- This works -->
<uc1:MyWebUserControl runat="server" ID="MyControl3"
MyProperty="0" />
最佳答案
在控件上定义属性很容易,就像您所做的那样:
[System.ComponentModel.Bindable(true)]
public MyEnum MyProperty { get; set; }
但是,值得注意的是 [Bindable(true)]
不需要属性。它只是提示 VS 在属性网格中提供额外的数据绑定(bind)属性。它根本不会影响 ASP.NET 运行时。
要在 ASPX 标记中静态设置此属性,只需使用枚举的值:
<uc1:MyWebUserControl runat="server"
ID="MyControl1"
MyProperty="MyValue" />
如果想动态设置,可以在Page_Init
中设置:
void Page_Init() {
MyControl1.MyProperty = GetEnumValueFromSomewhere();
}
<uc1:MyWebUserControl runat="server"
ID="MyControl1" />
最后,要将其动态设置为数据绑定(bind)的一部分,您可以使用 <%# foo %>
数据绑定(bind)语法:
<uc1:MyWebUserControl runat="server"
ID="MyControl1"
MyProperty="<%# GetEnumValueFromSomewhere() %>" />
请注意,数据绑定(bind)选项应该仅在数据绑定(bind)时使用。如果您不想进行数据绑定(bind),那么调用 DataBind()
是相当浪费的。在整个页面上,甚至只在那个控件上。
关于c# - 如何将枚举值设置为 Web 用户控件的自定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039051/