2010-07-20 24 views
1

我實現由布拉德威爾遜描述的template.master技術在this posting但我改變線31他EditorTemplates的/ Template.master從:MVC2 ValidationMessage在template.master不渲染

<%= Html.ValidationMessage("", "*") %> 

到:

<%= Html.ValidationMessage(ViewData.ModelMetadata.PropertyName)%> 

以便實際驗證文本將顯示在控件旁邊。 這沒有任何變化。如果我將同一行移動到object.ascx文件中,它會呈現,但不在佈局的正確位置。元數據生命週期中的某些內容在此時尚未填充?

UPDATE

我有這個在我的object.ascx和它的作品。

<%= Html.Editor(prop.PropertyName)%> 
    <p> 
     <%=Html.ValidationMessage(prop.PropertyName)%> 
    </p> 

UPDATE2

這個工程模板:

<%= Html.ValidationMessage("")%> 

相信模板的範圍是在控制層面,而不是視圖模型的水平,所以「」有它只是使用整個控件模型,而不是從視圖模型中搜索屬性。

回答

0

這個工程模板:

<%= Html.ValidationMessage("")%> 

相信模板的範圍是在控制層面,而不是視圖模型的水平,因此,「」也只是用整個控制模型,而不是從視圖模型中搜索一個屬性。

+0

@ Html.ValidationMessage(prop.PropertyName)爲我工作。正如你在你的問題中提到的。 :) – Doomsknight 2011-12-16 12:30:29

0

您的模型狀態中必須缺少某些東西,或者您已將密鑰更改爲屬性名稱。

爲ValidationMessage(任何)的肉香代碼非常簡單:

private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary<string, object> htmlAttributes) { 
     string modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression); 
     FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation(); 

     if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null) { 
      return null; 
     } 

     ModelState modelState = htmlHelper.ViewData.ModelState[modelName]; 
     ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors; 
     ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0]; 

     if (modelError == null && formContext == null) { 
      return null; 
     } 

其他唯一的問題是,如果你以某種方式清除出你的validationMessage。