在html中有条件地包含选中的属性.RadioButtonFor (MVC4 /剃须刀)

本文关键字:MVC4 剃须刀 RadioButtonFor 有条件 html 包含选 属性 | 更新日期: 2023-09-27 18:18:36

当您显式地在手动编码的html元素(如单选按钮)中包含选中的属性时,您可以使用bool来确定该属性是否在该元素上存在,如下所示。对于那些不想点击链接并给这个家伙一些应得的流量的人:

@{ bool agree = true; } <input type="checkbox" name="agree" value="agree" checked="@agree" />

然而,假设我想使用@Html.RadioButtonFor(),带有一个对象。同样的情况不会发生。

@Html.RadioButtonFor(m => m.Property, "ValueOfTextBox", new { @id = "MyId", @class = "my-class", autocomplete = "off", @checked = someBoolValue }) .

上面给出了一个checked="true"checked="false"属性。

我们的领域模型,视图模型和许多其他东西之间的差异使我们无法使用一些更有趣的脚手架…如果你包含了这么多的属性,你最好使用而不是来帮助…但是有一种方法可以使helper具有与普通html相同的行为吗?

我已经在HtmlHelper上创建了一个额外的扩展方法,包括控制属性存在的bool值,但我想知道是否有更直接的/框架行为方法来解决这个特定的问题。

在html中有条件地包含选中的属性.RadioButtonFor (MVC4 /剃须刀)

您真的不需要以这种方式设置checked属性—帮助程序将根据该属性的值为您完成设置。例如,如果你的模型有属性Gender,你想要呈现"男性"answers"女性"的单选按钮

@Html.RadioButtonFor(m => m.Gender, "Male")<span>Male</span>
@Html.RadioButtonFor(m => m.Gender, "Female")<span>Female</span>

Gender的值为"Female",那么当页面呈现时,第二个单选按钮将被选中。类似

@Html.CheckboxFor(m => m.IsMale)

将显示复选框,如果IsMale = true是选中的,如果IsMale = false是未选中的

这就是我如何实现它的,但是使用if else条件

            <div class="Choices" style="margin-left: 8%;">
                @foreach (var choice in Model.Choices)
                {
                    <span>@choice.CHOICE_CAPTION</span>
                    <label class="radio-inline">
                        @if (choice.CHOICE_CAPTION == Model.ANSWER_Q){
                            <input type="radio" name="inlineRadioOptions" id="@string.Format("{0}{1}", "inlineRadio", countR)" value="@choice.CHOICE_CAPTION" style="margin-left: -16px;" checked> @choice.CHOICE_TEXT
                        }else{
                            <input type="radio" name="inlineRadioOptions" id="@string.Format("{0}{1}", "inlineRadio", countR)" value="@choice.CHOICE_CAPTION" style="margin-left: -16px;"> @choice.CHOICE_TEXT
                        }
                    </label><br />
                    countR++;
                }
            </div> <!--END Choices-->

但是一定有一些更简单更好的方法来实现它。