我有一个视图模型,它包含一个类的5个实例作为子属性。这些子属性是使用一个局部视图中呈现,如下所示:为什么ValidationMessageFor在这种情况下显示我的验证消息?
<%Html.RenderPartial("_EntryItemForm", Model.EntryItem1, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "EntryItem1" } }); %>
<%Html.RenderPartial("_EntryItemForm", Model.EntryItem2, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "EntryItem2" } }); %>
<%Html.RenderPartial("_EntryItemForm", Model.EntryItem3, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "EntryItem3" } }); %>
<%Html.RenderPartial("_EntryItemForm", Model.EntryItem4, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "EntryItem4" } }); %>
<%Html.RenderPartial("_EntryItemForm", Model.EntryItem5, new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "EntryItem5" } }); %>
内局部视图,我有以下(表示一个场只):
<%: Html.LabelFor<EntryItemForm, string>(x => x.ItemName)%>
<%: Html.TextBoxFor<EntryItemForm, string>(x => x.ItemName)%>
<%: Html.ValidationMessageFor(x => x.ItemName)%>
标签和文本框都呈现使用正确的ID,名称等,默认的模型绑定器可以完美地处理所有事情。
不幸的是,即使ModelState包含ItemName字段的错误,ValidationMessage也不会出现。如果我向父视图添加ValidationSummary,则会显示错误。通常我只是使用ValidationSummary并继续前进,但我正在努力的设计需要内联验证消息。
有没有人有任何想法,为什么这可能是?
谢谢你的建议。我试着用你指定的方式来使用EditorFor,而我完全没有:没有错误,也没有输出!任何想法可能会导致什么? – 2011-04-13 09:07:36
@Paul Suart,编辑器模板的名称和位置很重要。它必须位于'〜/ Views/Shared/EditorTemplates'文件夹中,并命名为'XXX.ascx',其中'XXX'是它强类型的名称。这必须是“EntryItem1”属性的类型。 – 2011-04-13 10:15:07
嗯,我得到了EditorFor <>去(是我自己的错,因为我没有意识到它输出一个MvcHtmlString而不是写入响应),但仍然没有喜悦。已经更新了这个问题。 – 2011-04-13 20:58:19