ASP.net MVC Html.RadioButtonFor在Html.DisplayFor中进行分组

时间:2018-03-26 10:02:06

标签: asp.net-mvc razor

我在使用模型绑定获取一组动态单选按钮(由CMS驱动)时遇到问题。

到目前为止,我已经得到了无线电渲染,但它们的行为更像是复选框,我认为这取决于输入上的名称属性是不同的。我以为我已经通过使用父ID来对它们进行分组来解决这个问题,但这不起作用。在保存时,我想将状态(已检查/未选中)绑定到我的Option模型上的IsSelected属性。如果我传入一个name属性作为RadioButtonFor的一部分,我可以让收音机作为一个组工作,但是会丢失模型绑定。

我使用相同的设置与不同的显示模板的复选框工作正常,不知道我在哪里出错。有人得到任何建议吗?

模型

public class Question
{
    public int QuestionId { get; set; } // 1044
    public string QuestionText { get; set; } // Whats your favourite colour
    public HelpText HelpText { get; set; } 
    public IEnumerable<Option> Options { get; set; } // colours
}

public class Option
{
    public int OptionId { get; set; } // 
    public int ParentId { get; set; } // Set as QuestionId for radio button grouping :: 1044
    public string Label { get; set; }
    public string Value { get; set; }
    public bool IsSelected { get; set; }
}

public class RadioOption : Option {} // derived classes to drive DisplayFor template matching

public class CheckboxOption : Option {}

浏览

简化的局部视图,传递问题模型并循环遍历所有选项并渲染显示模板

<fieldset>
    @Html.DisplayFor(x => x.Options)
</fieldset>

单选按钮显示模板

@model ViewModels.RadioOption

@Html.RadioButtonFor(m => m.ParentId, Model.Label, Model.OptionId)
@Html.LabelFor(m => m.ParentId, Model.Label)

@Html.HiddenFor(m => m.Value)
@Html.HiddenFor(m => m.OptionId)
@Html.HiddenFor(m => m.Label)
@Html.HiddenFor(m => m.ParentId)

呈现HTML

<fieldset>
    <input id="Questions_5__Options_0__ParentId" name="Questions[5].Options[0].ParentId" type="radio" value="Red">
    <label for="Questions_5__Options_0__ParentId">Red</label>

    <input id="Questions_5__Options_1__ParentId" name="Questions[5].Options[1].ParentId" type="radio" value="Green">
    <label for="Questions_5__Options_1__ParentId">Green</label>

    <input id="Questions_5__Options_2__ParentId" name="Questions[5].Options[2].ParentId" type="radio" value="Blue">
    <label for="Questions_5__Options_2__ParentId">Blue</label>

    <input id="Questions_5__Options_3__ParentId" name="Questions[5].Options[3].ParentId" type="radio" value="Yellow">
    <label for="Questions_5__Options_3__ParentId">Yellow</label>
</fieldset>

enter image description here

0 个答案:

没有答案