我有一个看似简单的任务,即根据模型的布尔值设置单选按钮“已选中”。我的模型“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
我有点沮丧,所以我想我宁愿接受一些帮助。基本上,HTML语法表示只放置“Checked”属性而没有任何值来检查单选按钮。我想知道如何使用MVC3剃刀语法来做到这一点。
答案 0 :(得分: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
编辑:查看源代码后,在我看来应该根据模型的值设置此属性。您是否尝试完全省略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;