2011-04-20 2 views
1
private static IDictionary<string, object> CreateBindAttribute<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression) 
      { 
       string exp = ExpressionHelper.GetExpressionText(expression); 
       var htmlAttributes = new Dictionary<string, object>(); 

       // knockout uses data-bind to bind the UI to the viewModels 
       htmlAttributes.Add("data-bind", "value: " + exp + ", uniqueName: true"); 

       return htmlAttributes; 
      } 

public static MvcHtmlString KoPasswordFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) 
     { 
      //return htmlHelper.PasswordFor(expression, CreateBindAttribute(expression)); 
      return htmlHelper.PasswordFor(expression,); 
     } 

Le code ci-dessus met en évidence mon problème. J'ai un helper knockoutJS html qui ajoute l'attribut 'data-bind' au balisage. Cependant, je trouve que les messages de validation sur le terrain ne fonctionnent pas.L'utilisation des aides html MVC3 casse les messages de validation

Si je commente la surcharge qui rend l'attribut bind, alors les messages de validation s'affichent ok. Notez que la validation fonctionne toujours avec la ligne commentée, mais le texte de validation ci-dessous ne s'affiche pas.

Quelqu'un peut-il confirmer ce comportement et si oui comment le réparer?

+0

, tout des idées? – jaffa

Répondre

0

Ceci est un peu une supposition mais je pense que le nom unique est le problème. Lorsque vous avez activé la validation discrète, les helpers Html rendent uniqueId/Names par défaut. Si la validation discrète est liée à cela, alors le nom unique de knockout change le nom, ce qui casserait la validation.

Supprimer le nom unique et voir si cela fonctionne.

2

dans votre css ajouter "white-space: pre-mot important" ou envelopper votre Html.ValidationMessageFor() avec "" dans votre message validateur utilisez "\ n" pour briser la bosse un message

Questions connexes