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

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);
        }

scroll top