异常“名称“ BindItem”在当前上下文中不存在”

时间:2018-10-10 07:53:31

标签: asp.net data-binding strong-typing

我最近发现您可以在诸如GridView或DetailsView之类的数据绑定控件的上下文中,通过指定ItemType属性,在aspx页面的标记中直接使用“ BindItem”和“ Item”。我现在想要实现的是成员的内联比较,例如:

    <asp:RadioButton Text="All Assigned" ID="rb1" 
         Checked='<%# BindItem.AllAssigned %>' 
         runat="server" GroupName="AllAssigned" />
    <asp:RadioButton Text="Responsible only"  ID="rb2" 
         Checked='<%# !BindItem.AllAssigned %>' 
         runat="server" GroupName="AllAssigned" />

在这种情况下,我需要双向绑定,因此我选择BindItem表达式。 但是似乎!BindItem.AllAssignedBindItem.AllAssigned == false之类的表达式在Markup中不起作用。他们给了我

这样的例外

名称“ BindItem”在当前上下文中不存在

数据绑定:DataContext.MyEntity不包含名称为“ false”的属性。

这些表达式我要写什么?

1 个答案:

答案 0 :(得分:1)

由于不能对数据绑定表达式使用逻辑取反运算符,因此可以在数据绑定表达式中使用Eval()DataBinder.Eval()来使用它,如下例所示:

<%-- alternative 1 --%>
<asp:RadioButton Text="Responsible only"  ID="rb2" 
         Checked='<%# !(bool)Eval("AllAssigned") %>' 
         runat="server" GroupName="AllAssigned" />

<%-- alternative 2 --%>
<asp:RadioButton Text="Responsible only"  ID="rb2" 
         Checked='<%# !Convert.ToBoolean(Eval("AllAssigned")) %>' 
         runat="server" GroupName="AllAssigned" />

如果要启用双向绑定,请使用RadioButtonListBind()属性中设置的SelectedValue,并使用具有不同ID的单独单选按钮,如下例所示:

<asp:RadioButtonList ID="rb" runat="server" SelectedValue='<%# Bind("AllAssigned") %>' RepeatDirection="Horizontal" ...>
    <asp:ListItem Text="All Assigned" Value="true"></asp:ListItem>
    <asp:ListItem Text="Responsible only" Value="false"></asp:ListItem>
</asp:RadioButtonList>

然后,您可以使用rb.SelectedValue检索选定的单选按钮值。

相关问题:Databinding of RadioButtonList using SelectedValue...possible?