7

我想在 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 内联。

NOTE2:我知道我可以使用这个:

 <%#DataBinder.Eval(Container.DataItem, "MyProperty").Equals("SomeValue")?"<!--":""%>

但我正在寻找一种更清洁的方式。

有没有办法用中继器内的内联代码测试 Container.DataItem?

4

4 回答 4

5

我会这样做。您将“可见性”函数绑定到 asp:literal 控件的可见属性:

<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>
于 2009-04-07T13:37:12.480 回答
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")%>
于 2009-04-07T13:30:26.257 回答
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>
于 2011-07-06T20:36:33.543 回答
-4

不,没有其他方法可以做到这一点。

于 2009-04-07T13:21:11.660 回答