我想在ASP.Net 2.0中做这样的事情:
<asp:Repeater id="myRepeater" runat="server">
<ItemTemplate>
<% if (DataBinder.Eval(Container.DataItem, "MyProperty").Equals("SomeValue")) { %>
<%#DataBinder.Eval(Container.DataItem, "MyProperty")%>
<% } %>
</ItemTemplate>
</asp:Repeater>
但我不能像这样测试DataBinder.Eval(Container.DataItem,“MyProperty”)。
注意:我无权访问源代码,我只能更改内联的aspx。
注意2:我知道我可以使用它:
<%#DataBinder.Eval(Container.DataItem, "MyProperty").Equals("SomeValue")?"<!--":""%>
但我一直在寻找一种更清洁的方式。
有没有办法在Repeater中使用内联代码测试Container.DataItem?
答案 0 :(得分:5)
我会这样做。将“visibility”函数绑定到asp:literal控件的visible属性:
<asp:Repeater id="myRepeater" runat="server">
<ItemTemplate>
<asp:literal runat='server' id='mycontrol'
visible='<%# DataBinder.Eval(Container.DataItem, "MyProperty").Equals("SomeValue") %>'>
<%# DataBinder.Eval(Container.DataItem, "MyProperty") %>
</asp:literal>
</ItemTemplate>
</asp:Repeater>
答案 1 :(得分:2)
您可以将其重构为服务器端脚本。
<script runat="server">
protected string ShowIfEqual(RepeaterItem Item, string SomeValue) {
YourTypeThatIsDataBound _item = (YourTypeThatIsDataBound)Item.DataItem;
return _item.MyProperty == SomeValue ? _item.MyProperty : string.Empty;
}
</script>
并将其称为内联...
<%#ShowIfEqual(Container, "SomeValue")%>
答案 2 :(得分:1)
“其他情况”怎么样?
看起来很难看,不太可读!
<asp:Repeater id="myRepeater" runat="server">
<ItemTemplate>
<%--(if true part)--%>
<asp:literal runat='server'
visible='<%# DataBinder.Eval(Container.DataItem,"OrderCount") > 0%>'>
<%# DataBinder.Eval(Container.DataItem, "OrderCount") %>
</asp:literal>
<%--(else part)--%>
<asp:literal runat='server'
visible='<%# DataBinder.Eval(Container.DataItem,"OrderCount") ==0%>'>
<p>yet no orders</p>
</asp:literal>
</ItemTemplate>
</asp:Repeater>
答案 3 :(得分:-4)
不,没有其他办法可以做到这一点。