您需要做的就是使编辑器模板的模型类型部分成为该编辑器将要编辑的属性的类型,而不是包含模型的类型。
假设您有一个EventType
类 aCreateEventModel
和 an EditEventModel
,并且 theCreateEventModel
和 theEditEventModel
都有EventType
属性,如下所示:
public class CreateEventModel
{
//Other stuff here....
public EventType TypeToCreate { get; set; }
}
public class EditEventModel
{
//Other stuff here....
public EventType TypeToEdit { get; set; }
}
您在 EditorTemplates 文件夹中创建一个名为 EventType.cshtml 的部分文件,并在其中放置如下内容:
@model EventManager.Models.EventType
@{
var types = //put whatever you need here to get the list of available types*;
}
@Html.DropDownListFor(m => m, types)
请注意 DropDownListFor() 调用中的简单 m => m 表达式,以及此处没有引用任何包含模型的事实:@model 声明中的类型只是 EventType。所有编辑器模板需要知道的是,它将用于编辑 EventType 类型的属性。
您可以在视图中使用此模板,CreateEventModel
如下EditEventModel
所示:
创建视图:
@model EventManager.Models.CreateEventModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@*Other stuff here...*@
@Html.EditorFor(m => m.TypeToCreate)
编辑视图:
@model EventManager.Models.EditEventModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@*Other stuff here...*@
@Html.EditorFor(m => m.TypeToEdit)
(*您用于此的代码:
EventManager.Models.DropdownEventTypesModel dropdownList = new EventManager.Models.DropdownEventTypesModel();
List<SelectListItem> types = dropdownList.EventTypes;
并不真正属于视图,但这是另一个问题。)