我可以在GridView的ItemTemplate中使用IF语句吗?

11

我有一个简单的GridView ItemTemplate,看起来像这样:

<asp:TemplateField HeaderText="User">
   <ItemTemplate>
      <a href="mailto:<%# Eval("Email") %>"><%# Eval("Name") %></a>
   </ItemTemplate>
</asp:TemplateField>

然而,此列表中并非所有用户在系统中都存有电子邮件,这意味着Eval("Email")有时会返回空白。当发生这种情况时,我宁愿不在该字段上放置链接,因为没有电子邮件地址mailto无法正常工作。

我该如何做到这一点呢?我希望可以在展示代码中使用IF语句,就像经典ASP曾经的工作方式一样。如果不行,我想我可以在数据源上创建一个包含整个HREF html的属性...

5个回答

18

你可以使用任何给定的公共函数,而不是使用 Eval。因此,你可以尝试执行以下操作:

<ItemTemplate>
    <%# (String.IsNullOrEmpty(Eval("Email").ToString()) ? String.Empty : String.Format("<a href='mailto:{0}'>{1}</a>", Eval("Email"), Eval("Name")) %>
</ItemTemplate>

如果你还没有尝试过这个确切的语法,但我在我的某个页面中正在使用类似的东西。


谢谢,这个很好用,只是稍微改了一下:编译器让我添加了一个ToString()。String.IsNullOrEmpty(Eval("Email").ToString()) - Slider345

3

C#.NET 使用下面的代码

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
    <asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="50" />
    <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
    <asp:TemplateField HeaderText="Status" ItemStyle-Width="100">
        <ItemTemplate>
            <asp:Label Text='<%# Eval("Status").ToString() == "A" ? "Absent" : "Present" %>'
                runat="server" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

VB.NET使用以下代码:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
    <asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="50" />
    <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
    <asp:TemplateField HeaderText="Status" ItemStyle-Width="100">
        <ItemTemplate>
            <asp:Label Text='<%# If(Eval("Status").ToString() = "A", "Absent", "Present") %>'
                runat="server" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>


2

这应该可以工作:

<a <%# String.IsNullOrEmpty(EMail) ? String.Empty : "href=mailto:Eval('Email')" %> ><%# Eval("Name") %></a>

0

你可以使用事件OnRowDataBound,或者如果你喜欢的话,可以使用全局变量,因为绑定是顺序的

像这样

public int myvar;

public void SetMyVar(int i) {
    myvar = i
}

并且在网格视图中

<%# SetMyVar(DataBinder.Eval(Container.DataItem, "Day")) %>
<% if (myvar == 0) { %>
      <%# Eval("Day") %>
<% } else { %>
     <asp:HyperLink ID="hplDay" runat="server" NavigateUrl="" Target="_blank" Text='<%# Eval("Day") %>' />                                
<% } %>   

0
<ItemTemplate>
    <%# Eval("Type").ToString() == "2" ? "Page" : "Blog" %>
</ItemTemplate>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接