1

我们目前有一个应用程序,我们有一个中继器

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

电话字段并不总是提供,当没有生成空白段落标签时,我们正在考虑更改

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

到:

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

或者:

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

然后让标签返回带有段落标签的电话号码,或者让函数返回它。有没有更好的方法来解决这个问题?

4

5 回答 5

1

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

<p runat="server" class="officials" visible='<% !string.IsNullOrEmpty(#Eval("Phone")) %>'>
    <% #Eval("Phone") %>
</p>
于 2013-06-04T14:44:02.527 回答
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>
于 2013-06-04T14:50:02.547 回答
0

而不是使用

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

我更喜欢 generate <p class="officials">foo</p>inside GetPhone(),然后你可以在Phone为空时不返回任何内容。

于 2013-06-04T14:28:14.313 回答
0

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

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

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

于 2013-06-04T14:31:43.253 回答
0

试试这个

<p class="officials" <%#string.IsNullOrEmpty(Eval("Phone").ToString())? "style='display:none;':''"  %> >
          <%#Eval("Phone") %>
</p>
于 2013-06-04T14:32:32.553 回答