我有一个带有asp:LinkButton的<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。
答案 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;
}