我對MVC相當新,並想知道在我的編輯器模板中填充下拉的最佳方法?MVC4 DropDownListFor從數據庫或代碼枚舉的最佳做法
我正在構建一個應用程序,它有很多下拉列表,這些下拉列表的數據是非常靜態的。目前,我將它們全部放在db中的表中,然後將它們加載到會話中。
下面是一個例子:
我的觀點:
@{
var widgettypes = Business.MySession.Current.WidgetTypes.ToSelectList(d => d.TypeName,
d => d.WidgetTypeID.ToString(),
" - Select - ");
}
<div class="editor-label">
@Html.LabelFor(model => model.WidgetTypeID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.WidgetTypeID, @widgettypes)
@Html.ValidationMessageFor(model => model.WidgetTypeID)
</div>
下拉助手:
public static List<SelectListItem> ToSelectList<T>(
this IEnumerable<T> enumerable,
Func<T, string> text,
Func<T, string> value,
string defaultOption)
{
var items = enumerable.Select(f => new SelectListItem()
{
Text = text(f),
Value = value(f)
}).ToList();
items.Insert(0, new SelectListItem()
{
Text = defaultOption,
Value = "-1"
});
return items;
}
我見過的例子很多在這裏,使節目製作選擇列表在視圖中靜態。
最好的做法是在靜態枚舉的.net代碼的視圖中創建它們,還是最好現在就這樣做呢?或者它只是無關緊要?
我只想知道我應該做什麼,而不是什麼正常工作。
好了,感謝您的SOLU灰。我想我唯一真正的問題是,我正在開發的應用程序有大約90多種不同的表單,這意味着我必須爲每個表單編寫自定義的Get()方法,而且它會有相當多的工作......等等。我知道從視圖(或editortemplate)加載是錯誤的,但對於我來說有更少的代碼,因爲有些表單會共享模板。 –
此外,我還有一個問題 - 如果我將EditorTemplate直接綁定到實體框架POCO模型 - 我現在已經爲每個模型創建視圖模型,然後通過我的控制器將它們實例化......如何更好地實現解?我看到的唯一優點是充分分離關注點。 –
我看到的另一個問題 - 我現在必須反駁我的EF poco和模型實例之間的副本......惡作劇! –