asp.net mvc3基于模型检查单选按钮

Jat*_*tin 9 asp.net-mvc asp.net-mvc-3

我有一个看似简单的任务,即根据模型的布尔值设置单选按钮"已选中".我的模型"IsSDPDonor"中有一个布尔值,我想将它用于是/否单选按钮.如果"IsSDPDonor"为真,则应检查"是"单选按钮,如果为假,则应检查"否"单选按钮.我尝试使用下面的代码,但它总是检查"否"单选按钮.

 @Html.Label("Would You Like to Donate Platelets (SDP)") : 
 @Html.RadioButtonFor(m => m.Donor.IsSDPDonor, true, new {@checked = Model.Donor.IsSDPDonor ? "checked" : ""}) Yes 
 @Html.RadioButtonFor(m => m.Donor.IsSDPDonor, false, new { @checked = !Model.Donor.IsSDPDonor ? "checked" : "" }) No
Run Code Online (Sandbox Code Playgroud)

我有点沮丧,所以我想我宁愿接受一些帮助.基本上,HTML语法表示只放置"Checked"属性而没有任何值来检查单选按钮.我想知道如何使用MVC3剃刀语法来做到这一点.

tva*_*son 13

在代码块中创建HTML选项,如果不应该选中该按钮,则将它们保留为null,然后在助手中使用正确的变量.

@{
    var yesOptions = Model.Donor.IsSDPDonor ? new { @checked = "checked" } : null;
    var noOptions =  Model.Donor.IsSDPDonor ? null : new { @checked = "checked" };
}
@Html.Label("Would You Like to Donate Platelets (SDP)") : 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, true, yesOptions ) Yes 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, false, noOptions ) No
Run Code Online (Sandbox Code Playgroud)

编辑:在查看源代码后,在我看来应该根据模型的值设置此属性.您是否尝试完全省略HTML属性?

case InputType.Radio:
    if (!usedModelState) {
        string modelStateValue = htmlHelper.GetModelStateValue(name, typeof(string)) as string;
        if (modelStateValue != null) {
            isChecked = String.Equals(modelStateValue, valueParameter, StringComparison.Ordinal);
            usedModelState = true;
        }
    }
    if (!usedModelState && useViewData) {
        isChecked = htmlHelper.EvalBoolean(name);
    }
    if (isChecked) {
        tagBuilder.MergeAttribute("checked", "checked");
    }
    tagBuilder.MergeAttribute("value", valueParameter, isExplicitValue);
    break;
Run Code Online (Sandbox Code Playgroud)