我使用MVC3 Razor視圖,並希望爲我的幾個類構建可重複使用的DropDownLists,但經過多次搜索,我還沒有找到一個示例,執行完全如何我需要它。 ..業務對象的DropDownList可重複使用的編輯器模板
在這個例子中,我有兩個班是這樣的: -
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public Group Group { get; set; }
}
public class Group
{
public int ID { get; set; }
public string Name { get; set; }
}
我有一個人工作的控制器/視圖。視圖有一個DropDownListFor控制:
@model Person
...
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
視圖使用直接Person類,不是中介模型,我還沒有找到一個令人信服的理由在此階段從其他抽象之一。
上述工作正常......在控制器中,我從從視圖返回的Person中獲取來自Group.ID的值,查找它並將Person.Group設置爲結果。工程,但不理想。
我在這裏找到了一個聯編程序:MVC DropDownList values posted to model aren't bound這將爲我工作,但我還沒有得到那個工作,因爲它只有真正有用,如果我可以重用。
我希望做的是有這樣的事情在一個模板: -
@model Group
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
而且在這樣的視圖中使用它: -
@Html.EditorFor(o => o.Group)
但是上面沒有按」 t似乎工作...上面的EditorFor行爲整個類插入編輯器(例如一個Group.Description的文本框)...而不是插入一個DropDownList與我列出的組
我有上面的t在一個名爲Group.cshtml的視圖/共享/編輯器模板下的文件模板
如果這個工作,那麼無論何時一個類有一個Group類型的屬性,這個DropDownList編輯器將默認使用(或者至少如果由某個屬性)
預先感謝提供的任何意見...
這是一個很好的答案。我想補充一點,你可以告訴'EditorFor'在哪裏尋找模板(比如,如果你想在視圖上使用不同的模板)。它看起來像這樣:'@ Html.EditorFor(x => x.Filters.SelectedImprintId,「〜/ Views/Books/EditorTemplates」,Model.Filters.ImprintItems)' –