ASP.net MVC перегруженный пользовательский оператор вывода строки <% = h - PullRequest
0 голосов
/ 10 октября 2008

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

Ранее:

<%= Html.Encode( ViewData['username'] ) %>

Будет эквивалентно:

<%=h ViewData['username'] %>

У кого-нибудь есть идеи, как я могу это сделать, может быть, используя метод расширения или что-то еще?

Ответы [ 2 ]

7 голосов
/ 10 октября 2008

Это не так чисто, как перегрузка оператора, но я использовал следующий метод расширения:

public static string Safe(this string sz)
{
    return HttpUtility.HtmlEncode(sz);
}

Так что в моем aspx id сделайте:

<%= this.ViewData["username"].Safe() %>

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

0 голосов
/ 10 октября 2008

ПРИМЕЧАНИЕ: это уродливый и не проверенный хак, я не думаю, что когда-либо сделаю это

public static String h (this System.Object o, System.Object viewData)
{
    return Html.Encode(viewData);
}

Я не уверен, что тип ViewData, поэтому я использовал Object здесь, было бы лучше на самом деле изменить тип в реальном коде.

это работает путем подвешивания метода расширения к System.Object, поэтому он всегда доступен для всех типов ... некрасиво, но может выполнять свою работу:

<%=h(ViewData['username']) %>
...