簡體   English   中英

如何在多個 Razor 頁面之間共享處理程序方法?

[英]How to share a handler method between multiple Razor pages?

我正在使用 ASP.NET Razor 頁面構建應用程序。

我已經使用 .NET Identity 實現了注冊和登錄。 在我的 _Layout 部分視圖中,我檢查是否User.Identity.IsAuthenticated 如果不正確,則會顯示注冊和登錄頁面的超鏈接。

現在,如果User.Identity.IsAuthentiated是真的,我想顯示一個注銷的超鏈接。 但是,這個不需要單獨的 Razor Page。 我只想注銷並重定向到索引。 我考慮過使用處理程序方法,例如:

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 點,但有額外的步驟和更笨拙。

要在多個 Razor 頁面之間共享一個處理程序方法,我認為您可以將此方法放在_layout.cshtml.cs ,其他 razor 頁面需要引用_layout.cshtml

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM