我最近发现您可以在诸如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.AllAssigned
或BindItem.AllAssigned == false
之类的表达式在Markup中不起作用。他们给了我
名称“ BindItem”在当前上下文中不存在
或
数据绑定:DataContext.MyEntity不包含名称为“ false”的属性。
这些表达式我要写什么?
答案 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" />
如果要启用双向绑定,请使用RadioButtonList
和Bind()
属性中设置的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?