【问题标题】:asp.net mvc3 checking radio button based on modelasp.net mvc3 根据模型检查单选按钮
【发布时间】:2011-12-28 01:21:52
【问题描述】:

我有一个看似简单的任务,即根据模型的布尔值设置“选中”单选按钮。我的模型“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 razor 语法来做到这一点。

【问题讨论】:

  • 为什么在匿名对象定义中使用@checked 而不是checked?另外,使用checked="checked" 应该与不带值的检查具有相同的效果,并且兼容性问题更少
  • @smartcaveman 因为checked 是一个关键字,您必须使用@ 将其区分为变量(在本例中为属性名称)。

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

在代码块中创建 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;

【讨论】:

  • 感谢您在更新中指出这一点。实际上,在这种情况下,我们不需要任何 html 属性。它只是工作。伟大的。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2012-10-18
  • 2016-12-10
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多