Экранирование одинарной кавычки из MVC 3 Razor Просмотреть переменную - PullRequest
6 голосов
/ 12 декабря 2011

У меня есть переменная внутри item.Name, которая содержит строку «Это вторник!».Чтобы устранить ошибки JavaScript, в контроллере c # я уже избежал этой одинарной кавычки.На веб-странице это выглядит как «Это вторник!».

Это, по крайней мере, предотвращает любые ошибки javascript, однако я не хочу, чтобы отображаемая строка содержала обратную косую черту, которая ее экранировала.

Как я могу вернуть экранирование послеоб ошибках javascript уже позаботились?Это похоже на довольно простую проблему, но я немного незнаком с MVC 3. Любая подсказка очень ценится!Мой поиск не нашел мне ни одного конкретного примера.

Пример моего кода в Razor View:

@foreach (var item in Model)
{ 
    @Html.DisplayFor(modelItem => item.Name) // item.Name = "It\'s Tuesday!"
} 

Ответы [ 3 ]

21 голосов
/ 12 декабря 2011

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

Это не проверено, но что-то в этом духе


public static class HtmlExtensions

{
    public static IHtmlString JavaScriptEncode(this HtmlHelper html, string item)
    {
        return new HtmlString(HttpUtility.JavaScriptStringEncode(item));
    }
}

Затем вы можете просто вызвать @ Html.JavaScriptEncode (yourProperty) из представления или просто сослаться на ваше закодированное имя свойства.

10 голосов
/ 12 декабря 2011

Следующее может быть использовано для повторного кодирования вывода.Это, однако, зависит от того, правильно ли вы справитесь с этим самостоятельно.

MVCHTMLString

@MvcHtmlString.Create(yourString)
0 голосов
/ 12 декабря 2011

Я предпочитаю делать свои взгляды немыми.Поэтому у меня было бы свойство с именем что-то вроде «Display» или «DisplayName», которое обрабатывало экранирование для представления.

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