ListView EmptyDataTemplate中的调用方法

时间:2012-01-15 19:17:25

标签: asp.net listview

我有一个带有EmptyDataTemplate的简单ListView。在EmptyDataTemplate中,有一个LinkBut​​ton,其Visble属性值是一个表达式,用于调用我后面的代码中的方法。问题是LinkBut​​ton始终可见,无论方法返回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;
}

2 个答案:

答案 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>