MVC 中的路由,"Specify a root relative path with a leading '/'"

Routing in MVC, "Specify a root relative path with a leading '/'"

我有一个名为 Submit 的剃刀页面给我一个 Value cannot be null. Parameter name : viewData 错误,所以我按照 post 的指示删除了代码顶部的 @page .我现在的问题是,当我加载页面时出现以下错误:

InvalidOperationException: The relative page path 'Index' 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.>

我希望我的页面有 URL 个 https://localhost:44369/Submit 我该怎么做?这是我在 Startup.cs 文件中的路由:

 app.UseMvc(routes =>
     {
        routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
     });

您收到错误的原因是语法不正确。在你的一个 Razor 视图中,你可能有一个锚标记,它看起来像:

<a asp-page="Index">Index</a>

该语法(不带正斜杠 /)适用于 Razor 页面。在 Razor 视图中,在页面名称前加上正斜杠:

<a asp-page="/Index">Index</a>

如果其他一切正确,您应该可以浏览 https://localhost:44369/Submit,它应该会显示您的提交页面中所写的内容

您可以在 MVC 项目中使用 Razor Pages asp-action

对于 MVC

1> 使用标签 asp-action 而不是 asp-page 来重定向。

<a asp-action="Submit" class="btn btn-success form-control">Submit</a>



2> 使用Route Attribute路由到指定的view.

Controller.cs

public class HomeController : Controller
{
      [Route("/Submit")]
      public IActionResult Submit()
      {
            return View("~/Views/Home/Submit.cshtml");
      }
 }



测试:

  https://localhost:44307/Submit

  https://localhost:44307/submit

结果截图:

有些文章可能会帮助您了解 Razor Pages 和 MVC。
How Does Razor Pages Differ From MVC In ASP.NET Core?
Building Your .NET App - Razor Pages vs. ASP.NET MVC