首页 > 解决方案 > Asp.net Core 3.1-如何从控制器返回到 Razor 页面?

问题描述

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

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

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

在此处输入图像描述

这是错误消息:

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

怎么能做到这一点?

标签: c#asp.net-mvcasp.net-coremodel-view-controllerrazor-pages

解决方案


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();

     });          
 }

推荐阅读