您可以在 Razor 中[废弃] DisplayTemplate 吗?

发布于 2024-12-04 19:06:28 字数 207 浏览 1 评论 0原文

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

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

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

干杯,

亚当。

I created a display template in Razor specifically for displaying currency, which I now want to remove in my code and replace with a standard text display template that accepts a string format (which I can set to "C").

There are a lot of occurrences however so I would like to use something like the [Obsolete] attribute with a warning message to allow this to be done over the course of the next couple of weeks without breaking all the code.

Is this possible or is there an equivalent method?

Cheers,

Adam.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

太傻旳人生 2024-12-11 19:06:28

似乎不是:(

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#),然后运行应用程序。这不会是万无一失的,但可能会有所帮助。

Seemingly not :(

The DisplayTemplates are generic, eg.:

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

To use [Obsolete], you'd have to mark the DisplayFor method, which would apply to them all. I tried to create a "more specific" version, to see if it would pick that up (since you could then mark that as [Obsolete], like this:

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

Sadly, this didn't work - it gives the following error:

Compiler Error Message: CS0121: The call is ambiguous between the
following methods or properties:
'MvcApplication11.Models.MyExtensions.DisplayFor(System.Web.Mvc.HtmlHelper,
System.Linq.Expressions.Expression>)'
and
'System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper,
System.Linq.Expressions.Expression>)'

So I don't think you can achieve what you need with [Obsolete]. If you really can't pick through the calls to DisplayFor in the IDE, you could try logging the stack trace inside the template (since you can execute any C# inside it) and then running through the app. This won't be bullet-proof, but might help a little.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文