【问题标题】:ASP.Net MVC: How to dynamically generate a meta tag based on the content of the url?ASP.Net MVC:如何根据 url 的内容动态生成元标记?
【发布时间】:2010-09-26 12:20:57
【问题描述】:

这是一个想法:

当用户想要查看 /controller/action 时,我希望页面有一个“robots”元标记,其值设置为“all”。 当用户想要查看 /controller/action?sort=hot&page=2 (即它有一个查询字符串)时,我希望页面有一个“robots”元标记,其值设置为“noindex”。 当然这只是一个例子,它可能是这个问题存在的另一个标签。

我可以在 MVC 架构的哪个阶段放置一个钩子,以便视图在母版页中生成我想要的标记?

【问题讨论】:

    标签: html asp.net-mvc


    【解决方案1】:

    我为生成页面标题做了类似的事情,效果很好。像往常一样将您的标签放在母版页中:

    <%= Html.Encode(ViewData["Title"]) %>
    

    然后继承 ActionFilterAttribute 并覆盖 OnActionExecuting。从那里您可以访问控制器上下文并可以将您的视图数据设置为您想要的任何内容。

    public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.Controller.ViewData["title"] = "whatever";
        }
    

    最后一步是将要使用过滤器上下文的控制器属性。如果要将属性添加到所有类,可以从基本控制器继承。如果要传递参数,也有重载。在我的应用程序中。我实际上传递了页面标题。

    希望对您有所帮助。

    【讨论】:

    • 非常感谢凯尔。只有一件事:我不确定“如果你想传递参数,还有重载”是什么意思。
    • 如果您需要将参数传递给 ActionFilter,您可以在属性中提供它们。见此链接:weblogs.asp.net/scottgu/archive/2008/07/14/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2019-04-25
    • 2013-06-29
    相关资源
    最近更新 更多