你能在Razor中[Obsolete]一个DisplayTemplate吗?

时间:2011-09-16 10:39:47

标签: c# asp.net-mvc-3 razor display-templates

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

但是有很多事情发生,所以我想使用类似[Obsolete]属性的内容和警告信息,以便在接下来的几周内完成,而不会破坏所有代码。

这可能还是有同等的方法?

干杯,

亚当。

1 个答案:

答案 0 :(得分:0)

貌似不是:(

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&GT)”   和   “System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper,   System.Linq.Expressions.Expression&GT)'

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