请考虑以下代码段:
<asp:TemplateField HeaderText="Item Data">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ItemData1") %>
<br />
<%# DataBinder.Eval(Container.DataItem, "ItemData2") %>
</ItemTemplate>
</asp:TemplateField>
我需要重构这一点,以便如果ItemData2为空,则<br />
不会呈现
我不确定如何实现这一目标。
编辑:我试图像这样添加一个条件:
<% if(DataBinder.Eval(Container.DataItem, "ItemData2") != null) { %>
<br />
<%# DataBinder.Eval(Container.DataItem, "ItemData2") %>
<% } %>
它不起作用,看起来真的很难看!
答案 0 :(得分:2)
在DataBinder.Eval中,您可以像下面那样传递您的条件,这对您有用。
<%#( DataBinder.Eval(Container.DataItem,"Item1)==null ?DataBinder.Eval(Container.DataItem,"Item1"):
DataBinder.Eval(Container.DataItem,"Item2"))%>
答案 1 :(得分:2)
将dataBinder.Eval()
语句放在asp:literal
控件中,然后在CodeBehind中添加DataBinding事件处理程序,并根据您的条件设置Literal2.Visible = false
。将<br/ >
放在第二个文字中。
请注意,此方法会保留关注点的分离,使您没有C#代码返回HTML代码段,但不是“内联”。
使用转发器的示例,但所有这些控件的工作方式类似:
void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
// Execute the following logic for Items and Alternating Items.
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var dataItem = (YourDataItem)e.Item.DataItem;
if (null == dataItem.Item2)// this is pseudo code because I don't know what your dataItem looks like
{
((literal)e.Item.FindControl("Literal2")).Visible = false;
}
}
}
项目模板如下所示:
<asp:TemplateField HeaderText="Item Data">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ItemData1") %>
<asp:Literal Runat="server" ID="Literal2">
<br />
<%# DataBinder.Eval(Container.DataItem, "ItemData2") %>
</asp:Literal>
</ItemTemplate>
</asp:TemplateField>
答案 2 :(得分:2)
不要使用<br />
,而是考虑将这两个项目包装在显示为块的元素中,例如div
<asp:TemplateField HeaderText="Item Data">
<ItemTemplate>
<div><%# DataBinder.Eval(Container.DataItem, "ItemData1") %></div>
<div><%# DataBinder.Eval(Container.DataItem, "ItemData2") %></div>
</ItemTemplate>
</asp:TemplateField>
如果ItemData2为空,则div将为空白,不占用任何空格或在HTML中生成换行符。
有关示例,请参阅此JSFiddle
答案 3 :(得分:1)
我认为你可以通过在.cs
后面的代码中定义公共方法来获取ItemData2
然后检查它是否为空它返回想要的标记字符串,如果不返回空字符串
实施例::
<asp:TemplateField HeaderText="Item Data">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ItemData1") %>
CheckEmptyData(Eval("ItemData2").ToString())
</ItemTemplate>
</asp:TemplateField>
然后在代码背后:
public string CheckEmptyData(string ItemData2)
{
if (string.IsNullOrEmpty(ItemData2))
return "";
else
return "<br /> " + ItemData2;
}
答案 4 :(得分:0)
在绑定时,您可以添加&#34; ItemData2&#34;的换行符和空格。即,
if(ItemData2Field.length>0){
string item2 = ""+
" " + ItemData2;}
将其分为两行。
答案 5 :(得分:0)
根据Jodha的回答,这就是我解决它的方法。当然不是最优雅的解决方案,但我在这里看不到的东西似乎更优雅。
<%# DataBinder.Eval(Container.DataItem, "ItemData2") != null ? DataBinder.Eval(Container.DataItem, "ItemData1") + "<br /> <span style=\"color: gray;\">" + DataBinder.Eval(Container.DataItem, "ItemData2") + "</span>" : DataBinder.Eval(Container.DataItem, "ItemData1") %></asp:Label>