EditorFor()用于复杂类型列表(MVC)

我正在尝试为复杂类型的List创建一个EditorFor()。 具体来说,下面的“选项”应显示在一个多文本输入中,其中每个选项(字符串)都在一个新行中。 但是,我只能在文本框中显示一个选项而不是所有选项….

我的视图模型和类:

public class ItemViewModel { public int itemId { get; set; } [UIHint("Option")] public List Options { get; set; } } public class Option { public string Text { get; set; } } 

我的编辑模板:

EditorTemplates \ Item.cshtml

 @model ItemViewModel @Html.EditorFor(model => model.Options) 

EditorTemplates \ Option.cshtml

 //Not sure how to dispay the options here  

如果我将EditorTemplates更新为:

EditorTemplates \ Item.cshtml

 @model ItemViewModel @Html.EditorFor(model => model.Options[0]) 

EditorTemplates \ Option.cshtml

 @Html.TextBoxFor(x => x.OptionText) 

它将显示文本框中的第一个选项。 但是,我想要实现的是在多文本输入中显示所有选项。

有任何想法吗?

你几乎拥有它。

在此EditorTemplates\Option.cshtml添加以下内容:

 @model IEnumerable 

然后在您的视图中调用它,如下所示:

 @Html.EditorFor(model => model.Options) 

如果您没有在初始get中填充选项,则需要在ItemViewModel类中添加它:

 public class ItemViewModel { public ItemViewModel() { Options = new List 

此构造函数初始化集合:

 public ItemViewModel() { Options = new List(); } 

只需在Shared/EditorTemplates/Option.cshtml创建一个视图

 @model Option @Html.TextBoxFor(m => m.Text) 

并致电

 @Html.EditorFor(model => model.Options) 

EditorFor为您迭代收集。

我碰到了同样的问题,我有不同的解决方案,但有点类似于hutchonoid。

所以第一部分是相同的,修改Option.cshtml如下:

 @model IEnumerable 

在Item.cshtml中,我使用Html.Partial调用Option.cshtml,如下所示:

 @Html.Partial("Option", model:Model.Options) 

在我的情况下,我不必修改ItemViewModel类。 希望这可以成为这个问题的替代答案。 干杯!

使用@hutchonoid的答案,你应该在视图中调用模板:

 @Html.EditorFor(model => Model.Options) 

代替

 @Html.EditorFor(model => model.Options) 

请注意, Option.cshtml模板位于Views\Item\EditorTemplates\Option.cshtmlView\Shared\EditorTemplates\Option.cshtml