【问题标题】:How to share a handler method between multiple Razor pages?如何在多个 Razor 页面之间共享处理程序方法?
【发布时间】:2020-07-03 21:29:44
【问题描述】:

我正在使用 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&lt;&gt; 注入每个 Razor 页面,我觉得这是错误的。

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

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

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core razor


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-29
      • 1970-01-01
      • 2016-10-28
      • 2011-10-13
      • 2021-09-04
      • 2015-04-14
      • 1970-01-01
      • 2019-07-14
      相关资源
      最近更新 更多