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

Asp.net mvc 基于模型的asp.net mvc3检查单选按钮,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我有一个看似简单的任务,根据模型的布尔值设置单选按钮“选中”。我的模型“ISSDPGONER”中有一个布尔值,我想将其用于是/否单选按钮。“是”单选按钮应在“ISSDPDONSOR”为真时进行检查,“否”单选按钮为假时进行检查。我试图使用下面的代码,但它总是检查“否”单选按钮 @Html.Label("Would You Like to Donate Platelets (SDP)") : @Html.RadioButtonFor(m => m.Donor.IsSDPDonor, t

我有一个看似简单的任务,根据模型的布尔值设置单选按钮“选中”。我的模型“ISSDPGONER”中有一个布尔值,我想将其用于是/否单选按钮。“是”单选按钮应在“ISSDPDONSOR”为真时进行检查,“否”单选按钮为假时进行检查。我试图使用下面的代码,但它总是检查“否”单选按钮

 @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

我有点沮丧,所以我想我宁愿接受一些帮助。基本上,HTML语法表示只放“Checked”属性,不放任何值来检查单选按钮。我想知道如何使用MVC3 razor语法来实现这一点。

在代码块中创建HTML选项,如果不应选中按钮,则将其保留为空,然后在助手中使用适当的变量

@{
    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
编辑:查看源代码后,我觉得应该根据模型的值设置此属性。您是否尝试过完全省略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;

为什么在匿名对象定义中使用
@checked
而不是
checked
?此外,使用
checked=“checked”
应该与不带值的checked具有相同的效果,并且兼容性较差issues@smartcaveman由于选中的
是一个关键字,因此您必须使用
@
将其作为变量(本例中为属性名)进行区分。感谢您在更新中指出这一点。实际上,在这种情况下,我们不需要任何html属性。它只是工作。伟大的再次感谢。