Доступ к тегам сервера внутри Javascript в проекте MVC - PullRequest
1 голос
/ 05 февраля 2010

Я хотел бы использовать некоторые серверные теги внутри функции Javascript:

<%=Model.HtmlProperty%>

В прошлом я сохранял это значение в скрытом поле ввода, но когда свойство содержит HTML, у вас возникают проблемыспециальные символы, такие как кавычки.Я хотел бы избежать кодирования и декодирования в контроллере, чтобы избежать проблем со специальными символами.

Рик Штрал имеет пару сообщений по этой проблеме в сети.проект форм, но я ищу элегантное решение для проекта MVC.

ОБНОВЛЕНИЕ : приведенный ниже ответ Роберта Харви предлагает закодировать html.Опять же, это не то, что я хочу сделать .В конечном итоге я пытаюсь внедрить HTML-скрипт в экземпляр fckeditor.Это должно быть сделано в JavaScript.Я пытаюсь выяснить, как получить доступ к значению <%=Model.HtmlProperty%> внутри javascript без сохранения закодированного текста в скрытом элементе ввода.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2010

Кажется, что то, что я надеялся сделать - используя серверные теги внутри javascript, - невозможно. Я хранил строку внутри скрытого элемента ввода, и, согласно комментарию queen3, мне кажется, что мне придется продолжать делать то, что я делал все это время. Спасибо всем за ваш вклад.

0 голосов
/ 04 июля 2010

Используйте 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);
        }

0 голосов
/ 05 февраля 2010

Заимствуя пост Рика Страля и немного изменив вызывающую подпись, функция для кодирования строки 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) %>
...