c# - 如何将枚举值设置为 Web 用户控件的自定义属性?

标签 c# asp.net webforms

我们如何将枚举值绑定(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/

相关文章:

c# - ASP.NET 如何根据另一个页面的单击事件更新页面

c# - 编译错误

c# - 无法将文件复制到 WPF 中的 Environment.SpecialFolder.Startup

c# - 在Prime31中传递给函数时,在unity3d项目的ios中引发错误

c# - 如何在asp.net web表单中添加弹出窗口

asp.net - 在 asp.net c# 中使用 iframe 从网页中检索选定的文本?

c# - 为 Acumatica 创建自定义用户控件

c# - Fluent 和 NHibernate 的泛型

c# - 如何使用 iTextSharp for C# 设置现有 PDF 的版权元数据

c# - 从 gridview 检索图像 url 的代码