Asp.net Core 3.1-如何从控制器返回到 Razor 页面?

Posted

技术标签:

【中文标题】Asp.net Core 3.1-如何从控制器返回到 Razor 页面?【英文标题】:Asp.net Core 3.1- How can I return from Controller to Razor Page? 【发布时间】:2021-06-26 05:07:27 【问题描述】:

我想当用户登录网站时,在剃须刀页面中转到我想要的地址...

  if (rolename == "User")
                   
        return RedirectToPage("Dashboard","Profile");
       

此代码无法正常工作...

这是错误信息:

InvalidOperationException:相对页面路径“仪表板”只能在执行 Razor 页面时使用。指定带有前导“/”的根相对路径以在 Razor 页面之外生成 URL。如果您使用的是 LinkGenerator,那么您必须提供当前的 HttpContext 才能使用相关页面。

如何做到这一点?

【问题讨论】:

嗨@AliKhansari,错误信息是什么? 您是否尝试过 LocalRedirect("/Dashboard/Profile")? @Sasaman 是的,这是行不通的 @Rena InvalidOperationException: The relative page path 'Dashboard' can only be used while executing a Razor Page. Specify a root relative path with a leading '/' to generate a URL outside of a Razor Page. If you are using LinkGenerator then you must provide the current HttpContext to use relative pages. @AliKhansari 你能告诉我们你的项目结构吗?页面和控制器,你的 Startup 类... 【参考方案1】:

RedirectToPage 有多个不同参数的方法,你所做的与以下方法有关:

        //
    // Summary:
    //     Redirects (Microsoft.AspNetCore.Http.StatusCodes.Status302Found) to the specified
    //     pageName using the specified pageHandler.
    //
    // Parameters:
    //   pageName:
    //     The name of the page.
    //
    //   pageHandler:
    //     The page handler to redirect to.
    //
    // Returns:
    //     The Microsoft.AspNetCore.Mvc.RedirectToPageResult.
    [NonAction]
    public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler);

在你的情况下,应该是:

return RedirectToPage("/Profile/Dashboard");

另外,请务必添加剃须刀页面路由:

 public void ConfigureServices(IServiceCollection services)
 
     services.AddRazorPages(); 
 

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 
        //...

     app.UseEndpoints(endpoints =>
                    
         endpoints.MapControllerRoute(
                name: "default",
                pattern: "controller=Home/action=Privacy/phrase?");

         endpoints.MapRazorPages();

     );          
 

【讨论】:

以上是关于Asp.net Core 3.1-如何从控制器返回到 Razor 页面?的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个数组作为 POST 请求参数从 AJAX 发送到 MVC 控制器(ASP .NET Core 3.1 剃须刀)?

如何从 ASP.NET Core 3.1 中的存储库类创建确认电子邮件回调

ASP.NET Core 3.1 - 如何获取客户端的 IP 地址?

ASP.Net Core 3.1 - 从控制器向部分视图模态传递值?

Asp.Net Core 3.1 控制器方法未调用

Asp.net core 3.1 中的路由