0

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

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

但是然后要“生成”它并将其放入编辑器模板中,我无法让它工作。

这是我在 EditorTemplate 部分中尝试的内容:

@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 是泛型有关?

4

1 回答 1

1

这条线是问题所在:

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

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

有几种方法可以做到这一点,其中一种是为您的项目所有者创建一个自定义模型类,并让它包含 ownerID 和 DDLOptions。另一种方法是将 DDLOptions 粘贴在 ViewBag 中,但我通常远离它,因为我更喜欢使用编写良好的、特定于视图的视图模型。

我希望这有帮助。

于 2013-01-08T17:10:02.063 回答