4

在 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但是有没有办法改变它来匹配属性名称呢?

4

2 回答 2

4

在其中创建一个新的 EditorTemplate ~/Views/Shared/EditorTemplates/Manufacturer.cshtml

@Html.DropDownList("ManufacturerName", new SelectList(ViewBag.ManufacturerList))

然后用以下方式装饰 ViewModel 中的属性[UIHint]

[UIHint("Manufacturer")]
public string ManufacturerName { get; set; }

或者,如果您不想修改 ViewModel,则可以将templateName参数传递给该EditorFor()方法:

@Html.EditorFor(x => x.Manufacturer, "Manufacturer")

最后一种方法的问题是,如果编辑器使用@Html.EditorForModel().

于 2013-08-21T21:41:28.663 回答
1

创建一个持有 SelectList 和您希望绑定到的属性的 ViewModel:

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)
于 2013-06-26T22:11:48.640 回答