0

我有一个 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 属性为空。

4

2 回答 2

0

哇,PEBKAC。

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

于 2015-12-29T16:29:03.190 回答
0

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

想想看,当路由引擎遇到这个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>
于 2015-12-29T15:56:38.430 回答