2016-10-28 30 views
0

我不知道为什么,但我真的很苦恼。我想一个可空布尔属性绑定到一个单选按钮列表:在ASP.NET中绑定SelectedValue

<asp:RadioButtonList ID="MyControl" runat="server" SelectedValue='<%# Bind("InstanceOfMyModel.MyProperty") %>'> 
    <asp:ListItem Text="Yes" Value="True"></asp:ListItem> 
    <asp:ListItem Text="No" Value="False"></asp:ListItem> 
</asp:RadioButtonList> 

我可以通过MyControl访问的价值,但我似乎无法给SelectedValue属性绑定。此页面背后的代码有一个公共属性InstanceOfMyModel(由会话支持)MyMode l,它具有可为空的布尔值属性MyProperty。将类型更改为字符串不会执行任何操作。 'bound'属性不会改变:如果它是之前的字符串,它是相同的字符串;如果它为空,它仍然是空的。

谁能告诉我我做错了什么?是否存在一些抑制转换问题?我没有收到编译或运行时错误。

+0

我发现这一个简单的搜索... http://stackoverflow.com/questions/3482477/how-to-bind-bool-to-radiobutton-in-asp-net希望它有助于.. –

+0

@Angela谢谢你的尝试。这种情况是试图绑定到一个单选按钮的'Checked'属性,这是一个布尔值,但RadioButtonList的'SelectedValue'属性是一个字符串。 – ricksmt

+0

如果'MyControl'不在重复数据的控件(ListView,GridView等)中,则您的绑定将不起作用。使用后面的代码:'if(!Page.IsPostBack){MyControl.SelectedValue =“False”; }' – VDWWD

回答

0

SelectedValue属性不能以声明方式设置。您需要在代码后面执行此操作。

MyControl.SelectedValue = "False"; 

或者如果你真的不想使用后面的代码,你可以使用JavaScript。

<script type="text/javascript"> 
    var myControl = "<%= MyControl.ClientID %>"; 
    var myValue = "<%= InstanceOfMyModel.MyProperty %>"; 
    if (myValue == "True") { 
     document.getElementById(myControl + "_0").checked = true; 
    } else { 
     document.getElementById(myControl + "_1").checked = true; 
    } 
</script> 
+0

它不包括为什么它在重复数据的控件中工作,但我想我会接受它。 – ricksmt