【问题标题】:MVC 6 link tag helpers not creating proper URLMVC 6 链接标签助手没有创建正确的 URL
【发布时间】:2016-04-03 12:56:09
【问题描述】:

我有一个 MVC 6 项目,其路由设置为:

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

我正在尝试使用标签助手构建超链接,例如:

<a asp-controller="MyController" asp-action="Create" asp-route-closeOnSubmit="true" class="fa fa-plus indent-15">+</a>

当页面被创建并且我将鼠标悬停在链接上时,它报告为http://localhost/MyController/Create 而没有closeOnSubmit 参数。当我在 Chrome 的开发者工具中检查 HTML 时,它看起来像:

<a href class="fa fa-plus indent-15">+</a>

我需要做什么才能将 closeOnSubmit 参数正确附加到路由中?

编辑:
我不完全了解 MVC 路由,所以很遗憾给出了一些错误的信息。当我第一次创建我的应用程序时,它的默认路由是:

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

当试图让它工作时,我认为它可能没有正确路由,因为我没有将 closeOnSubmit 添加到路由中。在阅读了达林的回答后,我明白了,并且在将其添加到路线后肯定是错的。但是,对于这条特定的路线,我不需要传递 id。我尝试更改默认路由,使其使用 closeOnSubmit 而不是 id,但仍然没有解决未正确创建链接的问题。

在排查问题的时候,我也发现路线比我想象的还要错误。我正在处理的页面是通过转到http://localhost/ControllerOne/Create 生成的。超链接应该指向的页面是http://localhost/ControllerTwo/Create'. Even though my asp-controller tag is set to ControllerTwo, all of my hyperlinks are showing ashttp://ControllerOne/Create`。我有一种感觉,这只是因为空的 href 属性,但我想知道是什么导致 href 属性为空。

【问题讨论】:

    标签: asp.net-mvc tag-helpers


    【解决方案1】:

    哇,PEBKAC。

    问题出现是因为我引用的控制器还不存在。哪个,IIRC,会导致 MVC5 中的错误,而不是创建一个空的 HREF 标记。不管怎样,我应该足够聪明才能看到那个。

    【讨论】:

      【解决方案2】:

      只有路由的最后一个参数可以是可选的。否则路由引擎根本无法消除您的路由歧义。

      想想,当路由引擎遇到这个url时:

      http://localhost/MyController/Create/true
      

      true 令牌应该绑定到id 参数还是closeOnSubmit 参数?

      所以请确保您的id 参数是强制性的:

      template: "{controller=Home}/{action=Index}/{id}/{closeOnSubmit?}"
      

      并且你在构建你的 url 时已经为它指定了一个值:

      <a asp-controller="MyController" asp-action="Create" asp-route-id="1234" asp-route-closeOnSubmit="true" class="fa fa-plus indent-15">+</a>
      

      【讨论】:

        猜你喜欢
        • 2019-01-03
        • 2023-04-07
        • 2016-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多