[英]Templating Html.EditorFor for specific datatype in ASP.Net MVC3?
我正在开发.Net MVC3应用程序。 我有几个不同的models
,每个models
都有一个或两个属性,数据类型为varchar(1)
。 对于其中的每一个,都希望有一个下拉菜单,选择是/否,值为“ Y”或“ N”。
我当前的解决方案如下:我在公共类中有一个方法,该方法向我发送下拉列表的是/否值列表:
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = "Yes", Value = "Y" });
items.Add(new SelectListItem() { Text = "No", Value = "N" });
return items;
然后在我的控制器中,将此列表设置到ViewBag中并将其发送到View中:
ViewBag.YesNo = new SelectList(repository.GetYesNo(), "Value", "Text");
然后将其用于特定的Model
属性,如下所示:
@Html.DropDownListFor(model => model.PARAMETER_REQUIRED, (SelectList)ViewBag.YesNo)
这样就完成了工作,但是我不喜欢ViewBag方法,因为在切换视图时维护它非常繁琐,而且我不喜欢重复代码。 我想对此进行更改,以便我可以使用
@Html.EditorFor(model => model.PARAMETER_REQUIRED)
并让Razor知道我希望这是一个具有Yes / No属性的DropDown。我还希望它具有可重用性,以便可以对要使用此字段编辑的任何字段(在其他模型中)使用相同的模板是/否下拉列表。
这可能吗? 我知道可以“模板化” DisplayFor。 我们可以用EditorFor实现类似的功能吗?
这是内置显示模板和编辑器模板的一些非常好的示例。 看一下EditorTemplates / Boolean.ascx。 您将需要这样的东西,实际上我不确定为什么不能按原样使用布尔型模板并将视图模型更改为List或其他合适的集合。 然后,如有必要,您可以自定义布尔值编辑器模板,以提供所需的确切DropDownList视图。
编辑模板使用由给定类型分配给它的视图; 您可能想要做的是创建一个命名模板,并将名称应用到Html.EditorFor重载 。 然后,您可以为该方案创建一个专门的模板,而不必为char类型全局定义它。 看看这个例子 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.