首页 > 解决方案 > 在 _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 服务器端。

标签: asp.net-coremodel-view-controllerrazor.net-corerazor-pages

解决方案


如果要在布局页面中调用处理程序方法。我建议您可以尝试使用其处理程序创建一个新的剃须刀页面以添加响应 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");

    }

结果:

在此处输入图像描述


推荐阅读