在 _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 小部件?

在swt中按下按钮时如何在列表中搜索字符串

在redux中按下重置按钮时如何初始化所有状态

如何在python tkinter中按下按钮之前使窗口状态空闲?

(Kivy Python)在 .py 文件中按下按钮时切换屏幕

在 PyQt5 中按下时如何切换按钮文本