通过MVC模型变量在RadioButton上添加新属性

时间:2017-10-18 21:00:35

标签: asp.net-mvc model radio-button editorfor

我有MVC类,其中一个变量已声明为:

[UIHint("YesNoRadio")]
[Required(ErrorMessage = "test")]
public bool? Emergency { get; set; }

这会将HTML创建为

<div class="radio-inline"><label>
<input data-val="true" data-val-required="Test" id="Emergency" name="Emergency" type="radio" value="true">Yes</label>
</div>
<div class="radio-inline"><label>
<input id="Emergency" name="Emergency" type="radio" value="false">No</label>
</div>

我想要的是添加新属性,让我们说 div-effect =&#34; emergencyExplain&#34; 和单选按钮来

<label><input id="Emergency" name="Emergency" type="radio" value="false" div-effect = "emergencyExplain">No</label>

YesNoRadio.cshtml如下:

@model bool?    
<div class="radio-inline">
    <label>
        @if (Model.HasValue && Model.Value)
        {
            @Html.RadioButtonFor(x => x, "true", new { @checked = "checked" });
        }
        else
        {
            @Html.RadioButtonFor(x => x, "true");
        }
        Yes
    </label>
</div>
<div class="radio-inline">
    <label>
        @if (Model.HasValue && !Model.Value)
        {
            @Html.RadioButtonFor(x => x, "false", new { @checked = "checked" });
        }
        else
        {
            @Html.RadioButtonFor(x => x, "false");
        }
        No
    </label>
</div>

并将其称为:

@Html.EditorFor(m => m.Emergency, new { htmlAttributes = new { @class = "form-control" } })

MVC表单创建的新手,所以任何指向正确方向的帮助都将受到赞赏。

由于

1 个答案:

答案 0 :(得分:1)

使用[UIHint]属性只是指示EditorFor()方法使用该模板。它不会将任何其他数据传递给modell属性以外的模板。您需要使用EditorFor() additionalViewData传递模板名称和表示data-effect的对象。

您没有显示包含要添加到public string Effect { get; set; } 属性的值的模型属性,但假设其

[UIHint]

并在将模型传递给视图之前在GET方法中设置其值,然后从Emergency属性中删除@Html.EditorFor(m => m.Emergency, "YesNoRadio", new { effect = Model.Effect }) 属性并将主视图修改为

YesNoRadio.cshtml

然后将<div class="radio-inline"> <label> @Html.RadioButtonFor(x => x, true, new { id = "", div_effect = ViewData["effect"] }) <span>Yes</span> </label> <label> @Html.RadioButtonFor(x => x, false, new { id = "", div_effect = ViewData["effect"] }) <span>No</span> </label> </div> 模板更改为

<input data-val="true" data-val-required="Test" div-effect="emergencyExplain" name="Emergency" type="radio" value="True">

将生成

new { htmlAttributes = new { @class = "form-control" } }

有关当前视图代码的一些注意事项。

  1. 使用EditorTemplate 使用自定义RadioButtonFor()时不会做任何事情 - 仅限自定义checked 适用于使用内置模板(如何知道哪些 要将该类应用于的元素。如果要应用类名 单击单选按钮,在RadiobuttonFor()方法中添加 模板
  2. 您不需要(也不应该)设置null属性。 该属性由基于true方法的false方法设置 属性的值(如果是new { id = "" },则不会选择任何按钮, 如果是id或{{1}},那么相应的按钮就是 选择
  3. 另请注意使用{{1}}删除{{1}} 否则将产生重复的属性 无效的HTML