我正在使用List<>
迭代我ASP.NET MVC
模型中的一些集合。这是View
:
@for (int i = 0; i < Model.Accessories.Count; i++)
{
@Html.EditorFor(model => model.Accessories[i])
}
迭代此模板:
<div class="form-group">
@Html.Label(Model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-6 checkbox">
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.Name)
@Html.HiddenFor(m => m.RegistrationId)
@Html.HiddenFor(m => m.Description)
@Html.EditorFor(m => m.Enabled)
</div>
</div>
拥有此m.Enabled Hint
模板:
@(Html.Kendo().RadioButtonFor(m => m).Label("Yes").Value(true).HtmlAttributes(new { @class = "rb-observable" }))
@(Html.Kendo().RadioButtonFor(m => m).Label("No").Value(false).HtmlAttributes(new { @class = "rb-observable" }))
问题!出于某种原因,我需要更改Accessories
集合类型:
Accessories = new List<Accessories>();
要:
Accessories = new HashSet<Accessories>();
(由于EntityFramework本身如何处理表格;它使用HashSet
而不是List
)。
现在,我不能使用@ Html.EditorFor(model =&gt; model.Accessories [i]),因为它不可索引。
现在,视图会混淆输入的整个单选按钮/ id /命名。
如何修复/翻译它?
答案 0 :(得分:1)
EditorFor()
方法接受IEnumerable<T>
作为模型,并根据EditorTemplate
为集合中的每个项目正确生成正确的html。
不要在循环中生成html。它只需要
@Html.EditorFor(m => m.Accessories)
话虽如此,数据模型集合HashSet
应该是无关紧要的。您的编辑数据应始终使用视图模型,而不是数据模型 - 请参阅What is ViewModel in MVC?。