如何在MVC的视图中使用HashSet而不是List迭代集合?

时间:2018-03-14 15:09:37

标签: asp.net-mvc collections view

我正在使用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 /命名。

如何修复/翻译它?

1 个答案:

答案 0 :(得分:1)

EditorFor()方法接受IEnumerable<T>作为模型,并根据EditorTemplate为集合中的每个项目正确生成正确的html。

不要在循环中生成html。它只需要

@Html.EditorFor(m => m.Accessories)

话虽如此,数据模型集合HashSet应该是无关紧要的。您的编辑数据应始终使用视图模型,而不是数据模型 - 请参阅What is ViewModel in MVC?