【问题标题】:Can you [Obsolete] a DisplayTemplate in Razor?你能[过时] Razor 中的 DisplayTemplate 吗?
【发布时间】:2011-09-16 10:39:47
【问题描述】:

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

但是发生了很多情况,所以我想使用带有警告消息的 [Obsolete] 属性之类的东西,以便在接下来的几周内完成此操作而不会破坏所有代码。

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

干杯,

亚当。

【问题讨论】:

  • 由于显示模板是在运行时而不是编译时确定的,我认为您不能这样做。我现在推荐@{ //TODO: } 评论。
  • Visual Studio 可以使用正则表达式模式搜索进行解决方案范围的查找和替换。我无法想象为什么要花 30 多分钟才能完成这种非常大的改变。

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


【解决方案1】:

貌似没有:(

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.Expressions.Expression>)'

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2020-01-10
    • 2010-12-17
    • 2017-11-17
    • 2010-09-12
    相关资源
    最近更新 更多