我有一个带有EmptyDataTemplate的简单ListView。在EmptyDataTemplate中,有一个LinkButton,其Visble属性值是一个表达式,用于调用我后面的代码中的方法。问题是LinkButton始终可见,无论方法返回true还是false(我的方法都没有被调用,因为我甚至在它上面设置了一个断点)。有人碰到过这个吗?这里发生了什么?
e.g。
<asp:ListView ID="peopleListView" runat="server" ...>
...
<EmptyDataTemplate>
Sorry, no people to view.<br />
<asp:LinkButton ID="newButton" runat="server" Visible='<%# EditPermitted() %>'>New Record</asp:LinkButton>
</EmptyDataTemplate>
</asp:ListView>
在后面的代码中,我有方法:
protected bool EditPermitted()
{
return false;
}
答案 0 :(得分:0)
我认为你不能将scriplets <% %>
放在服务器控件中。
您需要获取RowDataBound事件,并设置链接按钮的可见性
void gridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.EmptyDataRow) {
LinkButton lb = e.Row.FindControl("newButton");
lb.Visible = EditPErmitted();
}
}
答案 1 :(得分:0)
您无法在服务器控件的属性中使用<% ... %>
或<%= ... %>
等代码块。只有像<%# ... %>
这样的数据绑定块。但是你可以在EmptyDataTemplate中使用代码块,在这种情况下,一个简单的if语句应该可以工作:
<EmptyDataTemplate>
<% if(EditPermitted()) { %>
<asp:LinkButton ID="newButton" runat="server" ... />
<% } %>
</EmptyDataTemplate>