2009-04-07 7 views
13

Ich bemerke ein seltsames Problem, wenn ich ModelState.AddModelError verwende, um Eingaben in meinen Formularen zu validieren. Die Ausgabe von Html.ValidationMessage ist nicht der wahre HTML-Wert, aber der Wert ist codiert und daher wird der CSS-Stil nicht auf die Fehlermeldung angewendet.ModelState.AddModelError codiert HTML

Beispiel:

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

Der Ausgang gezeigt wird, wie:

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

Das ist nicht der Fall mit ihrer früheren Beta der Verwendung sein, und ich bin nicht sicher, welcher Ansatz hier zu nehmen.

Dank Nick

Antwort

12

Es gibt auch eine andere Möglichkeit, dies zu tun, ohne dass Sie eine eigene Erweiterung erstellen müssen.

Sagen Sie zum Beispiel haben wir im Anschluss an den in einem unserem Controller:

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

Wir können dann folgendermaßen aus unserer Sicht:

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

Das wird die Fehlermeldung von '<b>Please Use a Valid Person Name</b>' verhindern verschlüsselt werden.

+1

Ich weiß nicht, ob dies auf einmal funktioniert, aber ich kann bestätigen, dass es nicht in MVC 3. –

+13

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

1

Ihre eigene Erweiterungsmethode erstellen, die imitiert Html.VallidationMessage ...?

Ich musste etwas ähnliches tun, weil die eingebauten MVC-Validierungskram (ModelState, ValidationMessage usw.) nicht für Seiten mit mehr als einem Formular auf einer Seite sorgen.

+0

Sie haben Recht - ich hatte den falschen Artikel aktualisiert. Sie waren beide mit der Codierung des HTML-Codes verwandt - ich hatte gerade den falschen aktualisiert. Ich habe das Update entfernt. Danke fürs bemerken. – IEnumerator

Verwandte Themen