Chr*_*rry 6 c# asp.net-mvc enums drop-down-menu
我还不确定最佳方式来存储前端显示或数据库存储的选择列表选项.
我一直在使用Enums,也使用描述装饰器(如何从ASP.NET MVC中的枚举创建一个下拉列表?)
我现在想我也可以为这些东西创建一个完整的类,所以我可以完全控制地存储以下信息:
是不是我应该考虑用手自己实现这一切?我想要一个非常可靠的方法来做到这一点,并且一个enum并不真的觉得它会削减它.
我应该考虑自己手动实现所有这些吗?
是的。枚举通常是有漏洞且不充分的抽象,并不总是适合您实际希望表示的复杂域模型。
与其自己动手,不如考虑Headspring的 Enumeration 类(通过github、nuget)。我们一直使用它而不是枚举,因为它几乎一样简单,而且更加灵活。
“State”枚举并将其用作选择列表的示例:
public class State : Enumeration<State>
{
public static State Alabama = new State(1, "AL", "Alabama");
public static State Alaska = new State(2, "AK", "Alaska");
// .. many more
public static State Wyoming = new State(3, "WY", "Wyoming");
public State(int value, string displayName, string description) : base(value, displayName)
{
Description = description;
}
public string Description { get; private set; }
}
public IEnumerable<SelectListItem> Creating_a_select_list(State selected)
{
return State.GetAll().Select(
x => new SelectListItem
{
Selected = x == selected,
Text = x.Description,
Value = x.Value.ToString()
});
}
Run Code Online (Sandbox Code Playgroud)
我并不是要向您推销这个特定的实现,您当然可以自己编写代码(Enumeration 类只有大约 100 行代码)。但我绝对认为你会从超越基本枚举中受益。鉴于您在问题中描述的场景,这是正确的方法。
小智 1
您可以使用“存储库模式”进行数据访问,并在控制器和视图之间使用视图模型。例子:
//Model
public class CustomerViewModel
{
public Customer customer { get;set; }
public IEnumerable<Village> Villages { get; set; }
}
//Controller
public ActionResult Index()
{
var customerViewModel = new CustomerViewModel
{
Customer = new Customer(),
Villages = _villageService.GetAll()
};
return View(customerViewModel);
}
//View
@model ViewModel.RegisterViewModel
@Html.DropDownListFor(q => q.Customer.VillageId, new SelectList(Model.Villages, "Id", "Title"), "Please Select")
Run Code Online (Sandbox Code Playgroud)
我写了一篇关于存储库模式的博文,你可以看看。