我在 Razor 中创建了一个显示模板,专门用于显示货币,现在我想在我的代码中删除它并替换为接受字符串格式(我可以设置为“C”)的标准文本显示模板。
但是发生了很多情况,因此我想使用带有警告消息的 [Obsolete] 属性之类的东西,以便在接下来的几周内完成此操作而不会破坏所有代码。
这是可能的还是有等效的方法?
干杯,
亚当。
我在 Razor 中创建了一个显示模板,专门用于显示货币,现在我想在我的代码中删除它并替换为接受字符串格式(我可以设置为“C”)的标准文本显示模板。
但是发生了很多情况,因此我想使用带有警告消息的 [Obsolete] 属性之类的东西,以便在接下来的几周内完成此操作而不会破坏所有代码。
这是可能的还是有等效的方法?
干杯,
亚当。
好像没有:(
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#),然后通过应用程序运行。这不会是防弹的,但可能会有所帮助。