我在使用模型绑定获取一组动态单选按钮(由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>