#asp.net-mvc #html-encode
Вопрос:
В настоящее время я нахожусь в процессе создания нового ASP.net Веб-сайт MVC, и я обнаружил, что использую Html.Кодирование повсюду, что является хорошей практикой, но становится довольно запутанным. Я думаю, что хорошим способом исправить это было бы, если бы я мог перегрузить оператора для автоматического кодирования Html.
Ранее:
<%= Html.Encode( ViewData['username'] ) %>
Было бы эквивалентно:
<%=h ViewData['username'] %>
У кого-нибудь есть какие-нибудь идеи, как я мог бы это сделать, может быть, с помощью метода расширения или что-то в этом роде?
Комментарии:
1.
ToString()
будет вызван<%= x %>
для преобразованияx
в строку, если это необходимо. Поэтому используйте свои собственные «строки» вместо строк и переопределите метод преобразования строк и/или оператор неявного преобразования строк. Или обновите до версии ASP.NET MVC, который уже делает именно это . 🙂
Ответ №1:
Это не так чисто, как перегрузка оператора, но я использовал следующий метод расширения:
public static string Safe(this string sz)
{
return HttpUtility.HtmlEncode(sz);
}
Поэтому в моем идентификаторе aspx сделайте:
<%= this.ViewData["username"].Safe() %>
Прикрепление дополнительного метода к концу выражения просто кажется мне более привлекательным, чем отправка значения через функцию.
Ответ №2:
ПРИМЕЧАНИЕ: Это уродливый и непроверенный хак, я не думаю, что когда-нибудь сделаю это
public static String h (this System.Object o, System.Object viewData)
{
return Html.Encode(viewData);
}
Я не уверен, какой тип ViewData, поэтому я использовал Object здесь, было бы лучше на самом деле изменить тип в реальном коде.
это работает путем отключения метода расширения от системы.Объект, поэтому он всегда доступен для всех типов…некрасиво, но это может сделать свою работу:
<%=h(ViewData['username']) %>
Комментарии:
1. Тебе должно быть стыдно за себя!