首页 > 解决方案 > 如何在多个 Razor 页面之间共享处理程序方法?

问题描述

我正在使用 ASP.NET Razor 页面构建应用程序。

我已经使用 .NET Identity 实现了注册和登录。在我的 _Layout 局部视图中,我检查是否User.Identity.IsAuthenticated. 如果不正确,则会显示指向注册和登录页面的超链接。

现在,如果User.Identity.IsAuthentiated是真的,我想显示一个用于注销的超链接。但是,这个不需要单独的 Razor 页面。我只是想注销并重定向到 Index。我考虑过使用处理程序方法,例如:

public async Task<IActionResult> OnPostLogoutAsync()
        {
            await signInManager.SignOutAsync();
            return RedirectToPage("/Index");
        }

我是否可以从每个 Razor 页面访问它?或者有没有其他方法可以解决我的问题?

我想到的其他事情:

  1. 将其实现为 PageModel 的扩展方法。然而,对我来说,这个解决方案似乎很笨拙和欺骗。默认情况下,我需要注入SignInManager<>每个 Razor 页面,我觉得这是错误的。

  2. 创建 MVC 控制器。一个可行的简单解决方案。但是,我想知道是否可以使用普通的 Razor Pages 来做到这一点。

  3. 将模型添加到 _Layout 局部视图。但是,对我来说,可以访问RedirectToPage模型需要从PageModel. 在这种情况下,我会收到错误。因此,如果我不继承,PageModel我需要找到另一种重定向到另一个 Razor 页面的方法,这使得这类似于第 2 点,但有额外的步骤和更笨拙。

标签: c#asp.netasp.net-mvcasp.net-corerazor

解决方案


要在多个Razor页面之间共享一个handler方法,我想你可以把这个方法放在 中_layout.cshtml.cs,其他的razor页面需要引用_layout.cshtml

我找到了一篇和你需求类似的文章,你可以参考一下


推荐阅读