将Html.DropDownListFor移动到EditorTemplate中

时间:2013-01-08 16:16:09

标签: asp.net-mvc c#-4.0 asp.net-mvc-4 html.dropdownlistfor mvc-editor-templates

尝试使用MVC4中的下拉列表创建编辑器模板。我可以让dropdownlistfor直接在视图中工作:

@Html.DropDownListFor(model => model.Item.OwnerId, new SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText"))

然后为了“生成”并将其放入编辑器模板中,我无法让它发挥作用。

以下是我在EditorTemplate partial中尝试的内容:

@Html.DropDownListFor(model => model, new SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText"))

我收到错误:

Exception Details: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'int' does not contain a definition for 'DDLOptions'

Model.DDLOptions.CustomerOptions的类型为IEnumerable<DDLOptions<int>>

public class DDLOptions<T>
{
    public T Value { get; set; }
    public string DisplayText { get; set; }
}

此错误是否与DDLOptions是通用的?

有关

1 个答案:

答案 0 :(得分:1)

这一行是问题所在:

@Html.DropDownListFor(model => model, new SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText"))

你的模型只是一个int,基于上面的代码,但是你也在部分中调用new SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText"),引用Model.DDLOptions,它在编辑器模板中的模型中不存在。你的模型只是一个int。

有几种方法可以执行此操作,其中一种方法是为项目所有者创建自定义模型类,并使其包含ownerID和DDLOptions。另一种方法是将DDLOptions粘贴在ViewBag中,但我通常会远离它,因为我更喜欢使用编写良好的视图特定的视图模型。

我希望这会有所帮助。