Как я могу сделать оператор if внутри ретранслятора - PullRequest
6 голосов
/ 21 августа 2009

<asp:Repeater> сводит меня с ума ..

Мне нужно сделать

<ItemTemplate>
    <% if (Container.DataItem("property") == "test") {%>
        I show this HTML
    <% } else { %>
        I show this other HTML
    <% } %>
</ItemTemplate>

Но я никак не могу найти способ, чтобы это произошло. Ternary не очень хорош, потому что объем HTML довольно большой, установка меток с помощью события DataBind также не очень хороша, так как в коде позади должны быть большие блоки HTML.

Конечно, есть способ сделать это ....

Ответы [ 6 ]

20 голосов
/ 21 августа 2009

Вы можете использовать видимость на стороне сервера:

<ItemTemplate>
    <div runat="server" visible='<% (Container.DataItem("property") == "test") %>'>
        I show this HTML
    </div>
    <div runat="server" visible='<% (Container.DataItem("property") != "test") %>'>
        I show this other HTML
    </div>
</ItemTemplate>
7 голосов
/ 21 августа 2009

Вы можете попробовать создать своего рода класс ViewModel, принять решение о своем коде, а затем порадоваться своему ретранслятору, просто отображая данные, которые ему предоставляются.

Это способ отделить логику от пользовательского интерфейса. После этого вы можете иметь тупой пользовательский интерфейс, который просто отображает данные, без необходимости решать, что / как показывать.

3 голосов
/ 21 августа 2009

Похоже, я перепутал это с фактической привязкой данных

Вы можете сделать это так:

<asp:Repeater runat="server"> 
    <ItemTemplate>    
        <% if (((Product)Container.DataItem).Enabled) { %>
        buy it now!
        <% } else {%>
        come back later!
        <% } %>
    </ItemTemplate>
</asp:Repeater>

3 голосов
/ 21 августа 2009

Вы можете сделать это с помощью пользовательских элементов управления:

<ItemTemplate>
    <uc:Content1 runat='server' id='content1' visible='<%# Container.DataItem("property") == "test" %>'/>
    <uc:Content2 runat='server' id='content2' visible='<%# Container.DataItem("property") != "test" %>'/>
</ItemTemplate>
0 голосов
/ 09 января 2014

Сначала вы должны определить переменную Count в вашем файле Page.cs

 <%if (Count == 0)
                         {
                             %>
                    <div style="background-color:#cfe9ed" class="wid_100 left special_text"><%# Eval("CompanyName") %></div>
                       <%}
                         else if (Count == TotalCount - 1)
                         {
                             %>
                        <div style="background-color:#f2f1aa" class="wid_100 left special_text"><%# Eval("CompanyName") %></div>
                        <%}
                         else
                         {
                              %>
                       <div class="wid_100 left special_text"><%# Eval("CompanyName") %></div><% } %>
                       <%Count++;  %>
0 голосов
/ 26 июля 2012

У меня была похожая проблема, и я наткнулся на эту страницу. Спасибо за отличные ответы, Гэвин и Келтекс вывели меня на правильный путь, но мне пришлось немного потрудиться, чтобы это сработало на моей странице. В конечном итоге мне удалось заставить его работать с этим логическим значением, поэтому я хотел поделиться для потомков:

Показать флажок, если ложь

<asp:CheckBox ID="chk_FollowUp" Visible='<%# (DataBinder.Eval(Container.DataItem, "FollowUp").ToString() == "False") %>' runat="server" />

Показать флаг img, если true

<asp:Image ID="img_FollowUp" AlternateText="Flagged" ImageUrl="Images/flag.gif" runat="server"
     Visible='<%# DataBinder.Eval(Container.DataItem, "FollowUp") %>' Height="30" Width="30" />
...