你能在Razor中[废弃]DisplayTemplate吗

本文关键字:废弃 DisplayTemplate Razor | 更新日期: 2023-09-27 18:08:41

我在Razor中创建了一个专门用于显示货币的显示模板,现在我想在代码中删除它,并用一个接受字符串格式的标准文本显示模板代替它(我可以将其设置为"C"(。

然而,有很多情况发生,所以我想使用类似于[Obsolete]属性的东西和警告消息,以便在接下来的几周内完成这项工作,而不会破坏所有代码。

这可能吗?或者有等效的方法吗?

干杯,

亚当。

你能在Razor中[废弃]DisplayTemplate吗

似乎不是:(

DisplayTemplates是通用的,例如:

@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.Expression.Expression>('

所以我认为[Obsolete]无法满足您的需求。如果你真的无法在IDE中选择对DisplayFor的调用,你可以尝试将堆栈跟踪记录在模板中(因为你可以在模板中执行任何C#(,然后在应用程序中运行。这不会是防弹的,但可能会有所帮助。