2012-04-04 21 views
1

Ich habe folgende Zweifel. Ich erwäge die Möglichkeit, HTML-Tags innerhalb meiner Resx-Texte für die Lokalisierung zu haben. Wenn ich die Ressourcen setzen direkt kann ich zurückgreifen:HtmlTags in Resx in @ Html.ValidationMessageFor angezeigt

@Html.Raw(@Resources.ResourcesFM.Error_Email) 

und es funktioniert wie erwartet. Das Problem ist, wenn die Ressource durch eine Bestätigungsnachricht von einem Htmlhelper aufgerufen wird:

@Html.ValidationMessageFor(model => model.Email) 

von einem attibute Got:

[DataType(DataType.EmailAddress, 
ErrorMessageResourceType = typeof(ResourcesFM), 
ErrorMessageResourceName = "ErrorMailIncorr")] 

Was ich versuche ...

@Html.Raw(Html.ValidationMessageFor(model => model.Email)) 

Ich weiß nicht, wie man das gleiche Ergebnis erhält wie bei der Verwendung von @ html.Raw, da die Ausgabe vom Helfer ein MvcHtmlString ist ...

Danke

Antwort

3

Try this:

Ausblick:

@Html.Raw(Server.HtmlDecode(@Html.ValidationMessageFor(m => m.UserName).ToString())) 

Controller Aktion:

ModelState.AddModelError("UserName", "This is a link <a href='http://example.com'>Google Home</a>"); 
+0

Wenn Sie Ihren Text um 4 einrücken Leerzeichen oder 1 Tab, wird es als Code interpretiert (Hinzufügen von Hervorhebungen, so dass '' Tags möglich sind). – kay

0

Html.ValidationMessageFor html-kodiert die Nachricht. Aber Sie sollten HttpUtility.HtmlDecode() auf das Ergebnis einfach anrufen können. Obwohl das Ergebnis HTML-Tags und ähnliches enthält, wird die Dekodierung in diesem Teil der Zeichenfolge einfach nicht ausgeführt.

Also, wenn `Html.ValidationMessageFor (...)‘ liefert

<span>&lt;div&gt;This is in a div&lt;/div<&gt;</span> 

Dann HttpUtility.HtmlDecode(Html.ValidationMessageFor(...).ToString()) geben Ihnen

<span><div>This is in a div</div></span> 

Es ist nicht schön, aber es funktioniert. Ihre Alternative besteht darin, Ihre eigene Validierungshilfsversion neu zu erstellen, die die Nachricht niemals codiert.

+0

Hallo Bhamlin: "Das beste über geladene Übereinstimmung für "System.Web.HttpUtility.HtmlDecode (String)" hat einige ungültige Argumente -> Das ist, was ich bekomme, wenn ich setze: HttpUtility.HtmlDecode (Html.ValidationMessageFor (...)) ... – mcartur

+0

Es dauert eine Zeichenfolge, keine HtmlString. Rufen Sie einfach ToString() auf. Ich habe meine Antwort aktualisiert. – bhamlin

+0

Danke Bhamlin beim Ausführen von HttpUtility.HtmlDecode (Html.ValidationMessageFor (...). ToString()): HTML-Code erscheint auf meiner Seite ohne Fehler: mcartur

0

für die Lokalisierung, können Sie String.Format verwenden und entsprechende Platzhalter für den Link

ModelState.AddModelError("UserName", String.Format("This is a link {0}", "<a href='http://example.com'>Appropriate String From a Resource</a>")); 
wählen
+0

Ich denke, das ist die Lösung, die ich verwenden werde. Vielen Dank – mcartur

Verwandte Themen