【问题标题】:Routing in MVC, "Specify a root relative path with a leading '/'"MVC 中的路由,“使用前导 '/' 指定根相对路径”
【发布时间】:2020-10-26 02:54:46
【问题描述】:

我有一个名为 Submit 的剃须刀页面,它给了我一个 Value cannot be null. Parameter name : viewData 错误,所以我删除了我的代码顶部的 @page,因为 this 帖子已定向。我现在的问题是,当我加载页面时出现以下错误:

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

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

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

【问题讨论】:

    标签: asp.net-mvc asp.net-core routes asp.net-core-mvc asp.net-mvc-routing


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢,我有一个隐藏在导致错误的 div 深处的 asp 页面。我改变了它并且它起作用了,我不敢相信我之前没有看到/这样做过。我花了很多时间试图修复它。
    【解决方案2】:

    您可以在 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

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      相关资源
      最近更新 更多