asp.net-core - 在 _Layout 文件中按下按钮时,如何在 Razor Pages 中创建 cookie?
问题描述
我是 Razor 页面的新手,在没有控制器的情况下无法解决这个问题。我通常理解如果这是一个常规的剃须刀页面,我可以只向 PageModel 添加一个 OnPost 方法,但是对于 _Layout,我的理解是不应该有一个 PageModel,因为它会与调用的 PageModel 冲突@RenderBody()
我想做这样的事情:
_Layout.cshtml:
<!DOCTYPE html>
<html>
<head>
<title> @ViewData["Title"] </title>
</head>
<body>
<partial name="_TopNavigation" />
<div>
<button type="button" asp-page-handler="Dismissed"></button>
</div>
<div class="content">
<div>
@RenderBody()
</div>
</div>
</body>
</html>
按下按钮时,我想添加一个服务器端 cookie。像这样的东西:
addCookie.cs :
public IActionResult onPostDismissed()
{
Response.Cookies.Append("MyCookie", "value1", cookieOptions);
}
我希望按钮位于每个页面上,这就是我将其添加到 _Layout 的原因,但是我无法弄清楚我可以在哪里添加代码来处理它。另外,我知道使用 javascript 会相当简单,但我特别想设置 cookie 服务器端。
解决方案
如果要在布局页面中调用处理程序方法。我建议您可以尝试使用其处理程序创建一个新的剃须刀页面以添加响应 cookie。
然后您可以在页面中设置表单的 asp-page 属性,让按钮调用该处理程序方法。
更多细节,您可以参考以下代码:
在布局页面中添加以下代码:
<form method="post" asp-page="/Dismissed">
<button type="submit" value="Click">Click Me To Add Cookie</button>
</form>
创建一个名为 Dismissed 的新剃须刀页面,并将以下代码添加到其页面模型中
public void OnPost() {
int i = 0;
Response.Cookies.Append("MyCookie", "value1");
}
结果:
推荐阅读
- bash - 传递和解析文件匹配
- javascript - 如何在 Firebase 中获取路径
- ansible - Ansible 模块 amazon.aws 和 aws_service_ip_ranges 查找插件
- javascript - 确保用户在 React 应用程序中触发事件之前允许麦克风访问
- django - 我在使用 nginx 在同一域上设置 api 和前端时遇到问题
- amazon-web-services - Terraform:如何创建一个 S3 存储桶,其中的对象包含代码执行时间的时间戳?
- css - 在 react 中运行 yarn build 后 CSS 更改
- php - 如何使标签页标题动态化
- next.js - Vercel NextJS 应用程序环境变量不起作用
- c# - 如何对依赖有效 CustomerId 工作的 Stripe 方法进行单元测试