仅当 cookie 存在时,如何在剃须刀页面中添加 HTML?

Posted

技术标签:

【中文标题】仅当 cookie 存在时,如何在剃须刀页面中添加 HTML?【英文标题】:How do you add HTML in a razor page only if a cookie exists? 【发布时间】:2021-12-19 13:08:28 【问题描述】:

目标

如标题中所述,我希望注入一些 html,它会加载 Google Analytics,它仅在用户接受 cookie 并且设置了特定 cookie 并且为 true 时才会激活。 我遵循了这些答案:Check if Cookie Exists

我的尝试

 @
       using System.Net.Http;
        if (HttpContext.Current.Response.Cookies.AllKeys.Contains("cookieNameHere"))
        
            <!-- Global site tag (gtag.js) - Google Analytics -->
            <script async src="https://www.googletagmanager.com/gtag/js?id=idhere"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag()dataLayer.push(arguments);
  gtag('js', new Date());

  gtag('config', 'G-codehere');
</script>

错误

它抱怨 HttpContext,说它在当前上下文中不可用,因此我尝试导入它但无济于事......

【问题讨论】:

避免在您的视图中访问HttpContext。相反,您的 ViewModel 应该是一个独立的对象,其中包含视图呈现所需的所有数据。 如果您使用的是 ASP.NET Core,那么 HttpContext.Current完全错误 - 您从哪里得到应该使用它的想法? 您已对您的问题应用了多个相互冲突的标签。请说明您实际上是 ASP.NET Core 还是 ASP.NET MVC(又名 ASP.NET 3.5 或 4.x)? 我从浏览 *** 中得到了这个想法。我删除了 MVC 标签,我使用的是 .NET 6、ASP.NET Core 请发布您的Controller 的操作方法,以及您的ViewModel 类定义。 【参考方案1】:

删除不需要的using 并简单地使用if (Context.Request.Cookies.ContainsKey("cookieNameHere"))

 @
        if (Context.Request.Cookies.ContainsKey("cookieNameHere"))
        
            <!-- Global site tag (gtag.js) - Google Analytics -->
            <script async src="https://www.googletagmanager.com/gtag/js?id=idhere"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag()dataLayer.push(arguments);
  gtag('js', new Date());

  gtag('config', 'G-codehere');
</script>

【讨论】:

以上是关于仅当 cookie 存在时,如何在剃须刀页面中添加 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

空白剃须刀页面,检查评论中是不是存在文章编号

仅当事件处理程序不存在时,如何才能绑定它?

.NET Core 无法添加 Razor 页面

如何更改剃须刀页面中注册页面的身份错误

仅当更新前不存在用户时如何将用户添加到索引 Elasticsearch

仅当 Access 2007 中不存在时才添加记录