GridView行中的条件输出

时间:2009-08-28 09:01:20

标签: asp.net

我将User对象数组数据绑定到GridView控件。最后一列包含“动作”锚点(编辑,删除):

    <asp:TemplateField HeaderText="Actions">
        <ItemTemplate>
            <a href="Remove.aspx?id=<%# Eval("user_id") %>">Remove</a>
            <a href="Edit.aspx?id=<%# Eval("user_id") %>">Edit</a>
    </ItemTemplate>
    </asp:TemplateField>

但是,如果当前绑定的User对象具有与登录时使用的id相同的id(我可以使用this.SessionUser.Id),我不希望将第一个锚输出到Remove action。如下所示:

    <asp:TemplateField HeaderText="Actions">
        <ItemTemplate>
            <a href="Remove.aspx?id=<%# Eval("user_id") %>">Remove</a>
            if (this.SessionUser.Id <> Eval("user_id") { <a href="Edit.aspx?id=<%# Eval("user_id") %>">Edit</a> }
    </ItemTemplate>
    </asp:TemplateField>

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以对此

使用runat =“server”控件
<asp:TemplateField HeaderText="Actions">
    <ItemTemplate>
        <a href="Remove.aspx?id=<%# Eval("user_id") %>">Remove</a>
        <a href="Edit.aspx?id=<%# Eval("user_id") %>" runat="server"
           visible='<%# this.SessionUser.Id <> Eval("user_id") %>'>Edit</a>
    </ItemTemplate>
</asp:TemplateField>

所有服务器控件,甚至是带有runat =“server”的HTML标签都有这个Visible属性,当它为假时,它会忽略最终HTML中的控件。

答案 1 :(得分:1)

不支持:(你需要写另一个函数传递给它user_id并从中获取appripriate字符串,如下所示:

 //in cs file
 protected string GetLink(object o)
 {
     if(!SessionUser.Id.Equals(o)) //or anyother way to compare equality
        return string.Format("<a href=\"Edit.aspx?id={0}\">",0);
     return "";
 }

 //in aspx file

 <ItemTemplate>
        <a href="Remove.aspx?id=<%# Eval("user_id") %>">Remove</a>&nbsp;
        <%# GetLink(Eval("user_id"))%>
 </ItemTemplate>

答案 2 :(得分:1)

你可以使用CSS:

<a style='visible:<%# this.SessionUser.Id <> Eval("user_id") %>' > ... </a>

确保this.SessionUser.Id是.cs文件中的公共变量