C# 如何根据查询字符串参数在母版页上添加元标记
如何添加根据浏览器的查询字符串参数而变化的元标记 例如,在我的博客网站上,博客是从数据库读取的,示例博客是 我想为不同的博客文章定制meta标签,这些文章都是从blog.aspx文件读取的 下面的文章给了我一个想法,但是我如何实现一个语句来读取查询字符串参数呢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; } } 公
通常在这种情况下,我会为所有视图模型创建一个基类,例如:
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,我的回答是否有助于您解决问题?