2009-04-07 9 views
13

Je remarque un problème étrange en utilisant ModelState.AddModelError pour valider l'entrée sur mes formulaires. La sortie de Html.ValidationMessage n'est pas la vraie valeur HTML mais sa valeur codée et donc le style CSS n'est pas appliqué au message d'erreur.ModelState.AddModelError encode HTML

Exemple:

private string errorMessage = "<span class=\"negative\">{0}</span><br class=\"hid\" />"; 
ModelState.AddModelError("title", String.Format(errorMessage, "Tab title is required")); 

La sortie est indiquée comme:

<span class="field-validation-error">&lt;span class=&quot;negative&quot;&gt;URL is Required&lt;/span&gt;&lt;br class=&quot;hid&quot; /&gt;</span> 

Cela n'a pas utilisé d'être le cas de prendre ici de bêta plus tôt leur et je ne suis pas sûr de ce que l'approche.

Merci Nick

Répondre

12

Il existe une autre façon de le faire, sans avoir à créer votre propre extension.

Disons, par exemple, nous avons les éléments suivants dans l'un de nos contrôleurs:

ModelState.AddModelError("Name", "<b>Please Use a Valid Person Name</b>"); 

On peut alors faire ce qui suit à notre avis:

@if(Html.ValidationMessageFor(x => x.Name) != null){ 
    @Html.Raw(Html.ValidationMessageFor(x => x.Name).ToString()) 
} 

Le empêchera le message d'erreur de '<b>Please Use a Valid Person Name</b>' de être codé.

+1

Je ne sais pas si cela a fonctionné en même temps, mais je peux confirmer que ce n'est pas dans MVC 3. –

+13

@ Html.Raw (HttpUtility.HtmlDecode (Html.ValidationMessageFor (x => x.Name) .ToHtmlString())); – George

1

Créer votre propre méthode d'extension qui imite Html.VallidationMessage ...?

Je devais faire quelque chose de similaire parce que les choses de validation MVC intégrées (ModelState, ValidationMessage, etc etc) ne tiennent pas compte des pages qui ont plus d'un formulaire sur une page.

+0

vous avez raison - j'avais mis à jour le mauvais article. Ils étaient tous deux liés à l'encodage du html - j'avais juste mis à jour le mauvais. J'ai supprimé la mise à jour. Merci d'avoir remarqué. – IEnumerator