ASP.net Перегруженный оператор вывода пользовательских строк MVC

#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. Тебе должно быть стыдно за себя!