尝试使用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是通用的?
有关答案 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中,但我通常会远离它,因为我更喜欢使用编写良好的视图特定的视图模型。
我希望这会有所帮助。