Я полагаю, вы ищете шаблоны Editor против HTML Helpers. Вот некоторые чтения на эту тему: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html
Я обычно помещаю определенные шаблоны представления в подпапку "EditorTemplates" папки представления, к которой они относятся. Для шаблонов многократного использования я бы сделал то же самое, но просто, но папку «EditorTemplates» в общей папке.
Тем не менее, вот пример, который несколько упростит ваше представление, учитывая следующий пример модели и контроллера. Обратите внимание, что это выведет следующее:
first
one
collection1
jonah jameson
collection2
spidey
Контроллер
public ActionResult Index()
{
var model = new SampleViewModel
{
SomeGroup = new List<ModuleGroupCollection>
{
new ModuleGroupCollection
{
HtmlDivId = "one",
Name = "first",
SomeCollection = new List<ModuleCollection>
{
new ModuleCollection()
{
Name = "collection1",
LockedBy = "jonah jameson"
},
new ModuleCollection()
{
Name = "collection2",
LockedBy = "spidey"
}
}
}
}
};
return View("Index", model);
}
Модель :
public class SampleViewModel
{
public IEnumerable<ModuleGroupCollection> SomeGroup { get; set; }
}
public class ModuleGroupCollection
{
public string Name { get; set; }
public string HtmlDivId { get; set; }
public IEnumerable<ModuleCollection> SomeCollection { get; set; }
}
public class ModuleCollection
{
public string Name { get; set; }
public string LockedBy { get; set; }
}
Просмотр, обратите внимание на использование шаблонов редактора :
@model StackQuestions.Models.SampleViewModel
@foreach (var item in Model.SomeGroup) {
@Html.EditorFor(x=>item)
foreach (var module in item.SomeCollection)
{
@Html.EditorFor(x=>module)
}
}
Шаблон редактора коллекции модулей:
@model StackQuestions.Models.ModuleCollection
<div>
@Model.Name
</div>
<div>
@if (Model.LockedBy != null)
{
@Model.LockedBy
}
</div>
Шаблон редактора коллекции групп модулей:
@model StackQuestions.Models.ModuleGroupCollection
<div>
@Model.Name
</div>
<div>
@Model.HtmlDivId
</div>