سؤال

أود استخدام بعض علامات الخادم داخل وظيفة JavaScript:

<%=Model.HtmlProperty%>

في الماضي لقد قمت بتخزين هذه القيمة في حقل إدخال مخفي، ولكن عندما يحتوي خاصية على HTML، فإنك تحصل على مشاكل مع أحرف خاصة مثل اقتباسات. أرغب في تجنب الاضطرار إلى تشفير وحدات التحكم في وحدة التحكم وتجنب مشاكل الأحرف الخاصة.

ريك سترال لديه زوج المشاركات في هذه المشكلة في مشروع نماذج الويب، لكنني أبحث عن حل أنيق لمشروع MVC.

تحديث: إجابة روبرت هارفي أدناه تشير إلى تشفير HTML. مرة أخرى، ذلك ليس ما أريد القيام به. وبعد في نهاية المطاف، أحاول حقن نص HTML في مثيل FCKEditor. يجب أن يتم ذلك في جافا سكريبت. أحاول معرفة كيفية الوصول إلى قيمة <%=Model.HtmlProperty%> داخل جافا سكريبت دون تخزين نص مشفير في عنصر إدخال مخفي.

هل كانت مفيدة؟

المحلول 2

يبدو أن ما كنت آمل أن أفعله - استخدام علامات الخادم داخل جافا سكريبت - غير ممكن. لقد قمت بتخزين السلسلة داخل عنصر مدخلات خفية، وفقا لتعليق Queen3، يبدو أنني سأضطر إلى القيام بما أقوم به طوال الوقت. شكرا لكم جميعا على أرائكم.

نصائح أخرى

الاقتراض من وظيفة Rick Strahl's، وتغيير توقيع الدعوة قليلا، وظيفة ترميز سلسلة JavaScript (بعد تغييرها إلى طريقة تمديد لفئة HTML) تبدو وكأنها هذه:

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

والتي يجب أن تسمح لك بالاتصال به مثل هذا:

<%= Html.EncodeJsString(Model.HtmlProperty) %>

استخدم HTMLHELPER لكتابة البرنامج النصي الخاص بك على الطيران ..


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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top