Eval в если представление дизайна заявления - PullRequest
0 голосов
/ 31 августа 2018

У меня есть репитер, показывающий товарные запасы. Я хочу показать, если нет на складе " Нет на складе ". Если есть, покажите количество и единицу товара.

Я пробовал следующие способы:

<%#Convert.ToInt32(Eval("AMOUNT")) == 0 ? "Out of stock" : %><%#Eval("AMOUNT") %> <%#Eval("UNIT") %>

и

<% if ( Convert.ToInt32(Eval("AMOUNT")) == 0) { %>
    <asp:Label ID="Label1" runat="server" Text='Out of stock'></asp:Label>
<%} else { %>
    <asp:Label ID="Label2" runat="server" Text='<%#Eval("AMOUNT") %>'></asp:Label>
<% } %>

Я получаю эту ошибку в этом методе: System.InvalidOperationException: такие методы привязки данных, как Eval (), XPath () и Bind (), могут использоваться только в контексте элемента управления с привязкой к данным.

Может быть, есть простое решение, но я не могу найти. Благодарю.

1 Ответ

0 голосов
/ 31 августа 2018

Это условие if явно не поддерживает привязку данных, следовательно, InvalidOperationException происходит:

<% if ( Convert.ToInt32(Eval("AMOUNT")) == 0) { ... } %>

Поскольку условие if имеет два блока разметки (с условием else), вы можете использовать два элемента управления asp:PlaceHolder в качестве замены с другим условием видимости (один равен нулю, а другой больше нуля):

<asp:PlaceHolder ID="AmountPlaceHolder1" runat="server" Visible='<%# Eval("AMOUNT") == 0 %>'>
    <asp:Label ID="Label1" runat="server" Text='Out of stock'></asp:Label>
</asp:PlaceHolder>
<asp:PlaceHolder ID="AmountPlaceHolder2" runat="server" Visible='<%# Eval("AMOUNT") > 0 %>'>
    <asp:Label ID="Label2" runat="server" Text='<%# Eval("AMOUNT") %>'></asp:Label>
</asp:PlaceHolder>

Или используйте строго типизированное RepeaterItem.ItemType свойство вместо Eval:

<asp:PlaceHolder ID="AmountPlaceHolder1" runat="server" Visible='<%# Item.Amount == 0 %>'>
    <asp:Label ID="Label1" runat="server" Text='Out of stock'></asp:Label>
</asp:PlaceHolder>
<asp:PlaceHolder ID="AmountPlaceHolder2" runat="server" Visible='<%# Item.Amount > 0 %>'>
    <asp:Label ID="Label2" runat="server" Text='<%# Item.Amount %>'></asp:Label>
</asp:PlaceHolder>
...