我对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和模型实例之间的副本......恶作剧! –