在 _Layout 文件中按下按钮时,如何在 Razor 页面中创建 cookie?
Posted
技术标签:
【中文标题】在 _Layout 文件中按下按钮时,如何在 Razor 页面中创建 cookie?【英文标题】:How can I create a cookie in Razor Pages when a button is pressed in the _Layout file? 【发布时间】:2021-02-11 11:05:12 【问题描述】:我是 Razor 页面的新手,在没有控制器的情况下无法解决这个问题。我通常理解如果这是一个普通的剃须刀页面,我可以只向 PageModel 添加一个 OnPost 方法,但是对于 _Layout,我的理解是不应该有 PageModel,因为它会与使用 @RenderBody()
调用的 PageModel 冲突
我想做这样的事情:
_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 服务器端。
【问题讨论】:
【参考方案1】:如果你想在布局页面中调用handler方法。我建议您可以尝试使用其处理程序创建一个新的 razor 页面以添加响应 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");
结果:
【讨论】:
成功了!我什至不知道您可以将页面处理程序添加到表单中。如果删除断点并单击按钮,它将重定向到 /dismissed 页面。有没有办法设置它在单击按钮时不重定向? 没关系。我发现你可以在表单中添加一个隐藏的输入,然后将当前的 Url 传递给函数并对那个 url 执行 localRedirect。以上是关于在 _Layout 文件中按下按钮时,如何在 Razor 页面中创建 cookie?的主要内容,如果未能解决你的问题,请参考以下文章
在 Tkinter 中按下按钮后如何清除 Entry 小部件?
如何在python tkinter中按下按钮之前使窗口状态空闲?