Тестирование Container.DataItem со встроенным кодом - PullRequest
6 голосов
/ 07 апреля 2009

Я бы хотел сделать что-то подобное в 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 inline.

ПРИМЕЧАНИЕ2: я знаю, что могу использовать это:

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

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

Есть ли способ проверить Container.DataItem со встроенным кодом внутри повторителя?

Ответы [ 4 ]

5 голосов
/ 07 апреля 2009

Я бы сделал это. Вы связываете свою функцию видимости с видимым свойством элемента управления 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>
2 голосов
/ 07 апреля 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")%>
1 голос
/ 07 июля 2011

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

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

<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>
0 голосов
/ 07 апреля 2009

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

...