我们目前有一个应用程序,我们有一个转发器
<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>
然后让标签返回电话号码,并在其周围包含段落标签,或让函数返回它。有没有更好的方法来解决这个问题?
答案 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>