Тестирование Container.DataItem с помощью встроенного кода

Я хотел бы сделать что-то подобное в 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")?"<!--":""%>

но я искал более чистый способ.

Есть ли способ протестировать Container.DataItem с помощью встроенного кода внутри Repeater?


person Filini    schedule 07.04.2009    source источник


Ответы (4)


Я бы сделал это. Вы привязываете свою функцию "видимости" к свойству visible элемента управления 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>
person Keltex    schedule 07.04.2009

Вы можете преобразовать его в скрипт на стороне сервера.

<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")%>
person Fung    schedule 07.04.2009
comment
это не встроенный - person nicolay.anykienko; 06.06.2018

А как насчет «другого случая»?

Выглядит некрасиво, не совсем читабельно!

<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>
person Ptr    schedule 06.07.2011

Нет, другого способа сделать нельзя.

person Brandon Montgomery    schedule 07.04.2009