模板的Html.用于ASP中特定数据类型的编辑器.净MVC3

本文关键字:数据类型 编辑器 MVC3 Html 用于 ASP | 更新日期: 2023-09-27 18:16:03

我正在开发一个。net mvc应用程序。我有几个不同的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属性的下拉菜单。我还希望这是可重用的,这样我就可以使用相同的模板的任何字段(在其他模型中),我想用这个是/否下拉框编辑。

这可能吗?我知道' temtemplate ' DisplayFor是可能的。我们能用EditorFor实现类似的功能吗?

模板的Html.用于ASP中特定数据类型的编辑器.净MVC3

下面是一些很好的内置显示模板和编辑器模板的例子。看看EditorTemplates/Boolean.ascx。你会想要这样的东西,事实上,我不知道为什么你不能使用布尔模板原样,并改变你的视图模型只是列表或其他合适的集合。然后,如果有必要,您可以自定义布尔编辑器模板,以提供您所需要的确切的DropDownList视图。

编辑模板使用给定类型分配给它的视图;您可能想要做的是创建一个命名模板,并将该名称应用于Html。EditorFor过载。然后,您可以为该场景创建一个专门的模板,而不必为char类型全局定义它。看看这个例子: