2010-07-20 3 views
1

I mis en œuvre la technique de template.master décrite par Brad Wilson dans this posting mais j'ai changé la ligne 31 de ses EditorTemplates/Template.master de:MVC2 ValidationMessage en template.master pas rendu

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

à:

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

afin que le texte de validation réel s'affiche à côté des contrôles. Ceci ne rend rien. Si je déplace la même ligne dans le fichier object.ascx, il rend, bien qu'il ne soit pas au bon endroit dans la mise en page. Est-ce que quelque chose avec le cycle de vie des métadonnées ne se produit pas à ce moment précis?

MISE À JOUR

J'ai dans mon object.ascx et il fonctionne.

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

MAJ2

Cela fonctionne dans le modèle:

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

je crois que la portée du modèle est au niveau de contrôle, pas le niveau de viewmodel, de sorte que le « » a il suffit d'utiliser le modèle de contrôle entier, plutôt que de chercher une propriété dans le viewmodel.

Répondre

0

Cela fonctionne dans le modèle:

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

je crois que la portée du modèle est au niveau de contrôle, pas le niveau de viewmodel, de sorte que le « » at-il suffit d'utiliser le modèle de contrôle complet, et non la recherche d'une propriété du viewmodel.

+0

@ Html.ValidationMessage (prop.PropertyName) J'ai travaillé pour moi. comme vous l'avez mentionné dans votre question. :) – Doomsknight

0

Un élément doit être manquant dans votre état Modèle ou vous avez modifié la clé en tant que nom de propriété.

Le code charnue pour ValidationMessage (rien) est assez simple:

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; 
     } 

Le seul autre problème est que si vous avez effacé en quelque sorte votre ValidationMessage.

Questions connexes