Можете ли вы [Устарел] DisplayTemplate в Razor? - PullRequest
3 голосов
/ 16 сентября 2011

Я создал шаблон отображения в Razor специально для отображения валюты, которую теперь хочу удалить в своем коде и заменить стандартным шаблоном отображения текста, который принимает формат строки (который я могу установить на «C»).*

Однако существует много случаев, поэтому я хотел бы использовать что-то вроде атрибута [Устарело] с предупреждающим сообщением, чтобы это можно было сделать в течение следующих нескольких недель без нарушения всего кода.

Возможно ли это или есть эквивалентный метод?

Приветствия,

Адам.

1 Ответ

0 голосов
/ 29 октября 2011

Кажется, нет: (

Шаблоны DisplayTemplates являются общими, например ::100100

@Html.DisplayFor(model => model.Foo)

Чтобы использовать [Obsolete], вам нужно отметить метод DisplayFor, который будет применяться ких всех. Я попытался создать «более конкретную» версию, чтобы посмотреть, подхватит ли она это (поскольку вы можете затем пометить это как [Obsolete], например:

public static class MyExtensions
{
    [Obsolete]
    public static MvcHtmlString DisplayFor<TModel, DateTime>(this HtmlHelper<TModel> html, Expression<Func<TModel, DateTime>> expression)
    {
        return html.DisplayFor(expression);
    }
}

К сожалению, это не такне работает - выдает следующую ошибку:

Сообщение об ошибке компилятора: CS0121 : вызов неоднозначен между следующими методами или свойствами: 'MvcApplication11.Models.MyExtensions.DisplayFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>) 'и' System.Web.Mvc.Html.DisplayExtensions.DisplayFor (System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>)'

Так что я не думаю, что вы можете достичь того, что вам нужно, с помощью [Obsolete]. Если вы действительно не можете выбрать вызовы DisplayFor в IDE, вы можете попробовать записать трассировку стека.внутри шаблона (так как вы можете выполнить любой C # внутри него) изатем работает через приложение.Это не будет пуленепробиваемым, но может немного помочь.

...