Экранирование символа одинарной кавычки - PullRequest
0 голосов
/ 07 мая 2011

В приведенном ниже коде я строю строку в моем контроллере. В этой строке я использую символ одинарной кавычки. Мне нужно защитить этого персонажа перед его рендерингом. Во-первых, я пытаюсь что-то вроде L \ 'affaire , но это не работает (потому что символ кавычки уже используется в моем помощнике, см. Ниже). Я преуспел с L & # 3 9; affaire (escape-символ для одинарных кавычек, без пробелов), но, возможно, есть лучший способ продолжить?

В моем контроллере я готовлю строку, подобную этой:

        var builderAnchor = new TagBuilder("a");
        builderAnchor.MergeAttribute("href", "#");
        builderAnchor.InnerHtml = "Annuler";

        var builderText = new StringBuilder();
        builderText.Append("L'affaire " + affaire.IdAffaire + " a été supprimée. ");
        builderText.Append(builderAnchor);

        sessionWrapper.Notification = new HtmlString(builderText.ToString());

Далее у меня есть помощник, вызываемый из вида, подобного этому:

    public static IHtmlString ShowNotification(this HtmlHelper helper)
    {
        //...
        returnedValue = "yellowNotification('" + helper.Encode(sessionWrapper.Notification) + "')";


        return new HtmlString(returnedValue);
    }

Наконец, все эти вещи создают HTML, как показано ниже:

yellowNotification('L'affaire 12345 a été supprimée');

В любом случае, спасибо.

1 Ответ

0 голосов
/ 07 мая 2011

Я бы порекомендовал вам использовать JavaScriptSerializer класс:

public static IHtmlString ShowNotification(this HtmlHelper helper)
{
    //...
    var serializer = new JavaScriptSerializer();
    var value = serializer.Serialize(sessionWrapper.Notification);
    returnedValue = string.Format("yellowNotification({0})", value);
    return new HtmlString(returnedValue);
}

Это гарантирует, что независимо от того, какие символы содержит строка уведомления, она будет правильно передана в функцию yellowNotification.

Также я не совсем понимаю, каково отношение первого фрагмента кода, который вы показали ко второму, но какова уверенность, что такой код не имеет места в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...