Asp.net 基于属性设置Enable=True或False的简单方法

Asp.net 基于属性设置Enable=True或False的简单方法,asp.net,Asp.net,我有一个带有asp:LinkButton的,我想根据属性I Eval()将属性设置为true或false,类似这样 <asp:LinkButton ID="btnEdit" runat="server" Text="Edit" CommandName="Edit" Enabled='<%# (int?)Eval("KittenFriendlyStatus") == (int)KittenEnum.Awwwww %>' /> 然而,我的语法是完全错误的,谁能

我有一个带有asp:LinkButton的
,我想根据属性I Eval()将属性设置为true或false,类似这样

    <asp:LinkButton ID="btnEdit" runat="server" Text="Edit" CommandName="Edit" 
Enabled='<%# (int?)Eval("KittenFriendlyStatus") == (int)KittenEnum.Awwwww %>' />


然而,我的语法是完全错误的,谁能为我纠正它,或建议一个更好的方式做这件事?我以前从未使用过C语言,只使用过Javascript。

您不能在服务器控件上使用数据绑定语法。要解决此问题,需要找到模板控件绑定时发生的事件。这将取决于控制。因此,假设模板控件有一个传递对象beind-bound的
ItemDataBound
事件。添加如下所示的事件处理程序:

public void Control1_ItemDataBound(Control sender, Object data, EventArgs args) {
    sender.FindControl("btnEdit").Enabled = (int?)DataBinder.Eval(data, "KittenFriendlyStatus") == (int)KittenEnum.Awwwww;
}
protected bool EnableEdit 
{
    get { return btnEdit.Enabled; }
    set { btnEdit.Enabled = value; }
}
应该是

Enabled='<%# (int?)Eval("KittenFriendlyStatus") == (int)KittenEnum.Awwwww ? true : false %>'
Enabled=''

在您的实例中,@Chiwee建议使用ItemDataBound事件可能就是您所需要的

如果您需要提供在多个位置进行管理的功能,则可以使用属性以如下方式干净地管理内容:

public void Control1_ItemDataBound(Control sender, Object data, EventArgs args) {
    sender.FindControl("btnEdit").Enabled = (int?)DataBinder.Eval(data, "KittenFriendlyStatus") == (int)KittenEnum.Awwwww;
}
protected bool EnableEdit 
{
    get { return btnEdit.Enabled; }
    set { btnEdit.Enabled = value; }
}
或者,如果您需要同时管理多个按钮:

protected bool EnableEdit 
{
    set 
    {
        btn1.Enabled = value;
        btn2.Enabled = value;
        //...
    }
}

我经常使用的一种方法是代码隐藏中的函数来设置属性,如:

Enabled=='<%# DoEnable(Eval("KittenFriendlyStatus"))%>' 

//in code-behind add this function:

public bool DoEnable(object status) 

{ 
   bool enable = //decide here 
   return enable; 
}
Enabled==''
//在代码隐藏中添加此函数:
公共bool DoEnable(对象状态)
{ 
bool enable=//在这里决定
返回使能;
}