在if语句设计视图中评估

时间:2018-08-31 06:56:27

标签: c# asp.net web-applications eval repeater

我有一个显示产品库存的中继器。我要显示是否没有库存“ 无货”。如果存在,请显示库存数量和单位。

我尝试了以下方法:

redis

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

我在此方法中收到此错误: System.InvalidOperationException:诸如Eval(),XPath()和Bind()之类的数据绑定方法只能在数据绑定控件的上下文中使用。

也许有一个简单的解决方案,但我找不到。谢谢。

1 个答案:

答案 0 :(得分:1)

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>