ASP.NET MVC编辑器模板不起作用

时间:2014-07-11 16:42:49

标签: c# asp.net-mvc razor

在让Razor View呈现带有嵌入式IEnumerable的ViewModel时出现问题后,我遇到了以下帖子: View Model IEnumerable<> property is coming back null (not binding) from post method?

我使用编辑器模板实现了建议的解决方案,但我的View仅显示嵌入式IEnumerable中的第一个属性。我从上面的帖子中实现了两个解决方案,但是带有EditorFor模板的解决方案对我不起作用。我的视图仅显示ID属性。

有没有人有任何想法为什么编辑器模板的索引可能不适用于我的设置?我完全按照建议实施了它。

2 个答案:

答案 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)

要使用编辑器模板,请考虑以下提示

  1. 您必须在 EditorTemplates 文件夹中放置模板 观看文件夹。
  2. 您应该使用EditorFor HTML帮助程序来调用相应的模板 (当你有特定的模型来查看时,它会找到所需的 模板自动,否则你必须提示引擎, 是通过EditorFor中的参数还是使用[UIHint]属性 在模型中。看Extending Editor Templates for ASP.NET MVC
  3. stringDateTime?
  4. 等模板中使用简单模型
  5. 要使用IEnumerable模型作为模板,请考虑EditorFor IEnumerable with TemplateName中提供的一个非常重要的提示。