为ASP.Net MVC3中的特定数据类型模板化Html.EditorFor?

时间:2011-11-29 19:53:00

标签: c# .net asp.net-mvc-3

我正在研究.Net MVC3应用程序。我有几个不同的models,它们都有一个或两个DataType为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;

在我的Controller中,我将此列表设置为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实现类似的东西吗?

2 个答案:

答案 0 :(得分:4)

Here是内置显示模板和编辑器模板的一些非常好的示例。看一下EditorTemplates / Boolean.ascx。你会想要这样的东西,实际上我不确定你为什么不能按原样使用布尔模板并将你的视图模型改为List或其他合适的集合。然后,如有必要,您可以自定义布尔编辑器模板,以便为您提供所需的精确DropDownList视图。

答案 1 :(得分:1)

编辑模板使用按给定类型分配给它的视图;您可能想要做的是创建一个命名模板并将名称应用于Html.EditorFor overload。然后,您可以为该方案创建专用模板,而不是为char类型全局定义。 Check out this example