Zugriff auf Server-Tags innerhalb Javascript in MVC-Projekt
-
18-09-2019 - |
Frage
Ich möchte einige Server-Tags in einer Javascript-Funktion:
<%=Model.HtmlProperty%>
In der Vergangenheit habe ich diesen Wert in einem verborgenen Eingabefeld gespeichert, aber wenn eine Eigenschaft HTML enthält, die Sie bekommen Probleme mit Sonderzeichen wie Anführungszeichen. Ich möchte vermeiden, in der Steuerung zu vermeiden Probleme mit Sonderzeichen zu kodieren und dekodieren.
Rick Strahl hat einen Paar
Lösung 2 Es scheint, dass das, was ich hatte gehofft, zu tun - Server-Tags in javascript - nicht möglich ist. Ich hatte die Zeichenfolge in einem versteckten Eingangselement worden zu speichern und per queen3 Kommentar, so scheint es, dass ich zu tun zu halten habe, was ich die ganze Zeit getan. Vielen Dank allen für Ihre Eingabe.
Andere Tipps
Ausleihe von Rick Strähls Post, und der anrufende Unterschrift ein wenig ändern, die Funktion einen JavaScript-String für die Codierung (nachdem es in eine Erweiterungsmethode für die HTML-Klasse zu ändern) sieht wie folgt aus:
public static string EncodeJsString(this HtmlHelper h, string s)
{
StringBuilder sb = new StringBuilder();
sb.Append("\"");
foreach (char c in s)
{
switch (c)
{
case '\"':
sb.Append("\\\"");
break;
case '\\':
sb.Append("\\\\");
break;
case '\b':
sb.Append("\\b");
break;
case '\f':
sb.Append("\\f");
break;
case '\n':
sb.Append("\\n");
break;
case '\r':
sb.Append("\\r");
break;
case '\t':
sb.Append("\\t");
break;
default:
int i = (int)c;
if (i < 32 || i > 127)
{
sb.AppendFormat("\\u{0:X04}", i);
}
else
{
sb.Append(c);
}
break;
}
}
sb.Append("\"");
return sb.ToString();
}
Welche erlauben sollten Sie es so nennen:
<%= Html.EncodeJsString(Model.HtmlProperty) %>
Mit Htmlhelper Ihrem Skript on the fly schreiben ..
public static string WriteLightboxScript(this HtmlHelper helper, string galleryName)
{
var builder = new TagBuilder("script");
builder.MergeAttribute("type", "text/javascript");
builder.SetInnerText("$(function() {$('a[rel=" + galleryName + "]').lightBox();});");
return builder.ToString(TagRenderMode.Normal);
}