亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Razor Pages - 在所有 OnGet 處理程序之后從基類調用方法

Razor Pages - 在所有 OnGet 處理程序之后從基類調用方法

C#
撒科打諢 2022-10-15 14:08:48
我有一個繼承自 PageModel 的基類(稱為 BmsPageModel)。BmsPageModel 中有一個方法,我需要在每個頁面上調用它,以便可以根據權限正確填充菜單。如何使從我的基類繼承的每個頁面在每個 OnGet 處理程序期間/之后調用此方法,而無需在每個頁面中手動鍵入它?
查看完整描述

2 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

當我從一個問題中學到新東西時,我喜歡它。感謝@MikeBrind 的評論和以下鏈接(學習頁面過濾器和頁面過濾器上的 MS 文檔),我可以回答這個問題并更新我的代碼。


我還有一個基類,它在 DbContext 上設置全局查詢過濾器,以便每個用戶的數據相互過濾。我有一個通用方法(稱為 PageLoadAsync),我必須記住將其添加到每個頁面的 OnGet/OnPost 方法中。現在通過覆蓋執行方法,我可以添加以下內容,而不必在每個子類中添加方法。


public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) 

{

    await PageLoadAsync();

    await base.OnPageHandlerExecutionAsync(context, next);

}

如果您想將其限制為僅 OnGet 方法,您可以執行以下操作:


public override void OnPageHandlerExecuting(PageHandlerSelectedContext context)

{

    if(context.HandlerMethod.MethodInfo.Name == nameof(OnGet))

    {

        // code placed here will only execute if the OnGet() method has been selected

    }

}


查看完整回答
反對 回復 2022-10-15
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

對于.Net 5下的剃須刀頁面(不是MVC),這似乎工作正常


public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) {

    if (context.HandlerMethod.MethodInfo.Name == "OnGet") {

        // code placed here will only execute if the OnGet() method has been selected

    }

    // Triggers the OnGet, OnPost etc on the child / inherited class

    await base.OnPageHandlerExecutionAsync(context, next);

}


查看完整回答
反對 回復 2022-10-15
  • 2 回答
  • 0 關注
  • 159 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號