C# 如何根据查询字符串参数在母版页上添加元标记

C# 如何根据查询字符串参数在母版页上添加元标记,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,如何添加根据浏览器的查询字符串参数而变化的元标记 例如,在我的博客网站上,博客是从数据库读取的,示例博客是 我想为不同的博客文章定制meta标签,这些文章都是从blog.aspx文件读取的 下面的文章给了我一个想法,但是我如何实现一个语句来读取查询字符串参数呢 通常在这种情况下,我会为所有视图模型创建一个基类,例如: public abstract BasicViewModel { public List<string> MetaTags {get; set; } } 公

如何添加根据浏览器的查询字符串参数而变化的元标记

例如,在我的博客网站上,博客是从数据库读取的,示例博客是

我想为不同的博客文章定制meta标签,这些文章都是从blog.aspx文件读取的

下面的文章给了我一个想法,但是我如何实现一个语句来读取查询字符串参数呢


通常在这种情况下,我会为所有视图模型创建一个基类,例如:

public abstract BasicViewModel
{
    public List<string> MetaTags {get; set; }
}
公共抽象基本视图模型
{
公共列表元标记{get;set;}
}
现在,如果我们假设站点中的每个视图模型都继承自该视图模型,那么我们的布局中就可以有一个强类型视图模型

@model BasicViewModel
<html>
    <head>
       <!-- Render meta tags here from view model -->
    </head>
    @RenderBody()
</html>
@model基本视图模型
@RenderBody()
我忽略了一个事实,即元标记可能比字符串更复杂,但你明白了


在您的控制器中,如果它们的视图模型由此派生,您可以自由地向视图模型添加任何元标记。这也适用于页面标题和每个页面常见的任何其他内容(例如,Google分析帐户详细信息!)。

要获取动态元关键字和描述,下面是我使用操作过滤器的解决方案

创建操作筛选器并处理其
OnActionExecuted
方法-

public class MetaDataAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var key = filterContext.RouteData.Values["id"];

        // using key get proper keywords and description for page

        filterContext.Controller.ViewBag.MetaKeywords = "1, 2, 3";
        filterContext.Controller.ViewBag.MetaDescription = "This is new description";
    }
}
然后使用元数据属性标记控制器操作-

    [MetaData]
    public ActionResult Index(string id)
    {
        return View();
    }
如果
id
是预期操作的动态查询字符串,则在调用OnActionExecuted时操作执行结束时,将使用RoutedData在操作筛选器中访问id

例如,如果你到达了URL-
http://localhost:5738/Blog/Index/123
,则将通过以下方式在操作筛选器中访问id-

然后根据id值,可以在ViewBag中设置适当的关键字和描述。然后从Viewbag中,您可以获得
\u Layout.cshtml
中的值,如下所示-

<meta name="keywords" content="@ViewBag.MetaKeywords">
<meta name="description" content="@ViewBag.MetaDescription"/>

因此,当页面呈现时,您的元关键字和描述将反映如下-

<meta name="keywords" content="1, 2, 3">
<meta name="description" content="This is new description"/>


请将标签从MVC更新为“asp.net MVC”或“WebForms”,具体取决于您正在使用/希望获得的答案。另外,请澄清,当您说“获取变量”时,您是否指“查询字符串参数”。@sapresblue,我的回答是否有助于您解决问题?