转发器如何避免空白html

时间:2013-06-04 14:15:43

标签: asp.net

我们目前有一个应用程序,我们有一个转发器

<asp:Repeater ID="rptOfficials" runat="server">
  <ItemTemplate>
    <tr>
      <td>
        <p class="officials">
          <%#Eval("OffPosition") %> <%#Eval("FullName") %>
        </p>
        <p class="officials">
          <%#Eval("Phone") %>
        </p>
      </td>
    </tr>
  </ItemTemplate>
</asp:Repeater>

并不总是提供Phone字段,如果没有生成空白段落标记,我们正在考虑更改

        <p class="officials">
          <%#Eval("Phone") %>
       </p>

要么:

    <p class="officials">
      <asp:label id="lblPhone" runat="server"/>
    </p>

或:

    <p class="officials">
      <%#GetPhone("OffId") %>
    </p>

然后让标签返回电话号码,并在其周围包含段落标签,或让函数返回它。有没有更好的方法来解决这个问题?

5 个答案:

答案 0 :(得分:1)

我不建议使用“display:none”,因为它会保留p标签的空间。相反,将p标记设为服务器标记并将其可见性设置为false。

<p runat="server" class="officials" visible='<% !string.IsNullOrEmpty(#Eval("Phone")) %>'>
    <% #Eval("Phone") %>
</p>

答案 1 :(得分:1)

这取决于您的Binding模型是如何组合的,但我建议在您的属性(电话)中添加您的(视图)模型中的逻辑(是的,您也可以并且应该在Web表单中使用ViewModels)。

这样你就可以将逻辑保留在视图之外。

public string Phone {
   get { 
       return this.phone ?? string.Empty;
   }
}

通过这种方式,您的逻辑可以很好地保留在视图模型中,并且您的视图只需要对其进行绑定。

如果您不想生成

-tag,可以在模型中添加布尔属性。

public bool DisplayPhone{
    get {
        return this.Phone == string.Empty;
    }
}

然后你需要将它绑定到可见属性,如Halcyon所提到的那样。 (注意你需要一个runat =“server”)

<p runat="server" class="officials" visible='<% #Eval("DisplayPhone") %>'>
    <% #Eval("Phone") %>
</p>

答案 2 :(得分:0)

而不是使用

<p class="officials">
  <%#GetPhone("OffId") %>
</p>

我更喜欢在<p class="officials">foo</p>内生成GetPhone(),然后当Phone为空时,您不会返回任何内容。

答案 3 :(得分:0)

您可以添加如下的小逻辑 -

<%# string.IsNullOrWhiteSpace(Eval("Phone").ToString()) ? 
   "" : ("<p class=\"officials\">" + Eval("Phone") + "</p>")%>

但是,如果您想添加更多逻辑,我建议您使用Repeater.ItemDataBound Event

答案 4 :(得分:0)

试试这个

<p class="officials" <%#string.IsNullOrEmpty(Eval("Phone").ToString())? "style='display:none;':''"  %> >
          <%#Eval("Phone") %>
</p>