我是MVC的新手,想知道在我的编辑器模板中填充下拉列表的最佳方法吗?我正在构建一个具有大量下拉列表的应用程序,这些下拉列表的数据非常静态.目前我将它们全部放在db中的表中,然后将它们加载到session中.这是一个例...
我是MVC的新手,想知道在我的编辑器模板中填充下拉列表的最佳方法吗?
我正在构建一个具有大量下拉列表的应用程序,这些下拉列表的数据非常静态.目前我将它们全部放在db中的表中,然后将它们加载到session中.
这是一个例子:
我的看法:
@{
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;
}
我在SO上看到了很多例子,它们显示了静态地在视图中创建选择列表.
最好的做法是在静态枚举中使用.net代码在视图中创建它们,还是最好按照我现在的方式进行操作?还是没关系?
我只是想知道我应该做什么,而不是什么才行.
解决方法:
我个人认为数据库驱动是要走的路.主要来自经验,假设您想在查找中添加一个值,并且您已经部署了应用程序,在将新值添加到Enum之后,您必须重新部署代码.通过数据库驱动,您只需对数据库运行插入查询,无需重新部署.
我不会在你的视图中调用你的数据库,但我不会说这是最佳实践,因为这不是视图的责任,它只需要显示数据,而不是查询其他数据.
首先,将您想要的项目放在模型的下拉列表中,如下所示:
public class YourModel
{
public int WidgetTypeId { get; set; }
public SelectList WidgetTypes { get; set; }
//...rest of your model
}
然后,在控制器中的GET方法中(在返回视图之前,使用视图中的代码填充该列表:
public ActionResult MyAction()
{
YourModel model = new YourModel();
model.WidgetTypes = Business.MySession.Current.WidgetTypes
.ToSelectList(d => d.TypeName, d => d.WidgetTypeID.ToString(), " - Select - ");
return View(model);
}
然后在你的视图中做:
@Html.DropDownListFor(model => model.WidgetTypeID, Model.WidgetTypes)
本文标题为:c# – 来自数据库或代码的DropDownListFor枚举的MVC4最佳实践
基础教程推荐
- C#工程建立后修改工程文件名与命名空间操作 2023-06-20
- C#实现常见加密算法的示例代码 2023-06-27
- C#操作注册表之RegistryKey类 2023-06-08
- C#很简单而又很经典的一句代码实例 2023-01-27
- c# – WPF应用程序中的Java Swing Windows“始终位于顶部” 2023-09-19
- C# Color.FromArgb()及系统颜色对照表一览 2023-03-29
- Task提高异步执行效率技巧 2023-05-30
- C#中使用async和await实现异步Udp通讯的示例代码 2023-06-27
- C#制作二维柱状图方法 2023-01-06
- 关于C#调用C++dll传指针释放内存问题 2023-03-28