我有一个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>
创建页面并将鼠标悬停在链接上时,它没有closeOnSubmit参数报告为http://localhost/MyController/Create
。当我在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 as
http://ControllerOne/Create`。我有一种感觉,那只是因为空的href属性,但我想知道是什么导致href属性为空。
答案 0 :(得分:0)
只有路线的最后一个参数可以是可选的。否则,路由引擎根本无法消除您的路由歧义。
当路由引擎遇到这个URL时,请考虑一下:
http://localhost/MyController/Create/true
true
令牌是否应绑定到id
参数或closeOnSubmit
参数?
因此,请确保您的id
参数是强制性的:
template: "{controller=Home}/{action=Index}/{id}/{closeOnSubmit?}"
并且在构建网址时已为其指定了值:
<a asp-controller="MyController" asp-action="Create" asp-route-id="1234" asp-route-closeOnSubmit="true" class="fa fa-plus indent-15">+</a>
答案 1 :(得分:0)
问题来了,因为我引用的控制器还没有存在。哪个,IIRC,会导致MVC5中的错误,而不是创建一个空的HREF标记。无论哪种方式,我都应该足够聪明地看到那个。