在ASP.net MVC 4 Web应用程序中,我有5个模型类,它们都具有相同的属性,比如string ManufacturerName
。我想在数据库中显示制造商的下拉列表(使用ViewBag
从控制器传递到视图的列表数据)在这些模型的创建/编辑模板中。可以这样做,但我在所有5个编辑器模板中重复下拉代码
@Html.DropDownList("ManufacturerName", new SelectList(ViewBag.ManufacturerList))
我希望有一些方法可以将名为“Manufacturer.cshtml”的编辑器模板中的上述下拉代码编写为部分视图,并且可以从模型模板中调用它,如此
@Html.EditorForModel(model => model.ManufacturerName)
我知道上面的行通常会调用string
的编辑器模板,因为这是ManufacturerName
的类型,但有没有办法改变它以匹配属性名称?
答案 0 :(得分:4)
在~/Views/Shared/EditorTemplates/Manufacturer.cshtml
中创建一个新的EditorTemplate:
@Html.DropDownList("ManufacturerName", new SelectList(ViewBag.ManufacturerList))
然后使用[UIHint]
:
[UIHint("Manufacturer")]
public string ManufacturerName { get; set; }
或者,如果您不想修改ViewModel,可以将templateName
参数传递给EditorFor()
方法:
@Html.EditorFor(x => x.Manufacturer, "Manufacturer")
最后一种方法的问题是,如果使用@Html.EditorForModel()
呈现编辑器,则不会使用相应的模板。
答案 1 :(得分:1)
创建一个ViewModel,它保存在SelectList和要绑定的属性上:
public class ManufacturerListViewModel
{
public SelectList ManufacturerList { get; set; }
public string ManufacturerName { get; set; }
}
然后编辑模板:
@model ManufacturerListModel
@Html.DropDownListFor(model => model.ManufacturerName, Model.ManufacturerList)
然后在你的观点中调用它:
@Html.EditorFor(model => model.Manufacturer)