所有你需要做的是讓你的編輯模板部分,這個編輯器是屬性的類型的模型類型將被編輯,而不是包含模型的類型。
假設你有一個EventType
類,一CreateEventModel
和EditEventModel
,並且兩個CreateEventModel
和EditEventModel
有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;
並不真正屬於某個視圖,但那是另一個問題。)
這對於使用帶有EventType數據類型的@ model非常有用。我結束了使用@model int?所以它可以被任何視圖一般使用。 –