根据属性设置Enable = True或False的简便方法

时间:2011-03-29 16:03:35

标签: asp.net

我有一个带有asp:LinkBut​​ton的<ItemTemplate>,我想将属性Enabled设置为true或false,具体取决于属性I Eval(),类似这样

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

然而,我的语法完全错误,有人可以为我理顺,或建议更好的方法吗?我以前从未用C#做过,只有Javascript。

4 个答案:

答案 0 :(得分:0)

您无法在服务器控件上使用数据绑定语法。要解决此问题,您需要找到绑定时发生的模板控件事件。这取决于控制。所以,假设模板控件有一个ItemDataBound事件,它传递了绑定的对象。像这样添加一个事件处理程序:

public void Control1_ItemDataBound(Control sender, Object data, EventArgs args) {
    sender.FindControl("btnEdit").Enabled = (int?)DataBinder.Eval(data, "KittenFriendlyStatus") == (int)KittenEnum.Awwwww;
}

答案 1 :(得分:0)

应该像......

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

答案 2 :(得分:0)

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

如果您需要提供在多个地方管理此功能的功能,您可以使用属性来干净地管理事情:

protected bool EnableEdit 
{
    get { return btnEdit.Enabled; }
    set { btnEdit.Enabled = value; }
}

或者如果您需要一次管理多个按钮:

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

答案 3 :(得分:0)

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

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

//in code-behind add this function:

public bool DoEnable(object status) 

{ 
   bool enable = //decide here 
   return enable; 
}