在让Razor View呈现带有嵌入式IEnumerable
的ViewModel时出现问题后,我遇到了以下帖子:
View Model IEnumerable<> property is coming back null (not binding) from post method?
我使用编辑器模板实现了建议的解决方案,但我的View仅显示嵌入式IEnumerable
中的第一个属性。我从上面的帖子中实现了两个解决方案,但是带有EditorFor
模板的解决方案对我不起作用。我的视图仅显示ID
属性。
有没有人有任何想法为什么编辑器模板的索引可能不适用于我的设置?我完全按照建议实施了它。
答案 0 :(得分:1)
如果您的视图仅显示第一个项目,则您的模板未在EditorTemplates文件夹中被选中。
在EditorFor扩展方法中定义模板,如下所示:
DataColumn title = new DataColumn();
title.ColumnName = "Title";
title.DataType = System.Type.GetType("System.String");
title.Expression = "ItemName + ' - ' + ItemDescription";
dataTable.Columns.Add(title);
// Or in one line
dataTable.Columns.Add(new DataColumn("Title", System.Type.GetType("System.String"), "ItemName + ' - ' + ItemDescription"));
ddlItems.DataSource = dataTable;
ddlItems.DataTextField = "Title";
ddlItems.DataValueField = "Id";
ddlItems.DataBind();
答案 1 :(得分:1)
要使用编辑器模板,请考虑以下提示:
EditorFor
HTML帮助程序来调用相应的模板
(当你有特定的模型来查看时,它会找到所需的
模板自动,否则你必须提示引擎,
是通过EditorFor
中的参数还是使用[UIHint]
属性
在模型中。看Extending Editor Templates for ASP.NET MVC string
,DateTime?
IEnumerable
模型作为模板,请考虑EditorFor IEnumerable with TemplateName中提供的一个非常重要的提示。