ASP.NET MVC路由和URL.Action
在我的一个asp.net mvc 2视图中,我有以下声明
window.location.href = '<% = Url.Action("Index","Feature", new {id=""}) %>/' + $("#ProductId").val();
可以看到$(“#ProductId”)。val()只能通过客户端操作来计算,所以外部url.Action
我有我的路线如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*.aspx(/.*)?" });
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.IgnoreRoute("{*allimages}", new {allimages = @".*.jpg(/.*)?"});
routes.MapRoute(
"Default", // Route name
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"DefaultIndex", // Route name
"{controller}.mvc/{id}", // URL with parameters
new { controller = "Home", action = "Index"} // Parameter defaults
);
routes.MapRoute("Root", "", new { controller = "Home", action = "Index", id = "" });
}
带有Url.Action的请求失败,因为路由认为“操作”是“id”
我如何确保“DefaultIndex”中的路由配置得到验证,并且URL是
重点>>价值
控制器=功能
action = index
id = 9a1347dc-60b0-4b3b-9570-9ed100b6bc6a
编辑2
图2:
编辑1-路线顺序
我几乎以为我通过改变路线顺序来解决它
routes.MapRoute(
"DefaultIndex", // Route name
"{controller}.mvc/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute("Root", "", new { controller = "Home", action = "Index", id = "" });
它的确适用于http:// localhost:61000 / Feature.mvc / 9a1347dc-60b0-4b3b-9570-9ed100b6bc6a /
但在同一页面上的帖子失败
HTTP://本地主机:61000 / Product.mvc /名单
****历史****
已经使用+ $(“#ProductId”)。val(); =“/ domainname [虚拟目录别名] /Fewature.mvc/Index”+ $(“#ProductId”)。val();
一直工作,但我必须在发布到服务器域名[虚拟目录别名] /从开发到测试到生产
试图简化它:
早些时候有以下声明:
window.location.href ='<%= Url.Action(“Index”,“Feature”})%> /'+ $(“#ProductId”)。
会导致多个Id值
HTTP://本地主机:61000 / Feature.mvc / 9a1347dc-60b0-4b3b-9570-9ed100b6bc6a / 3c5941e4-cb25-4d6f-9117-9ed100b4ca91
它将现有路线{id}映射到Url.Action(“Index”,“Feature”}
导致NoMatch
介绍
新{id =“”}来解决它。
尝试使用Url.RouteUrl来代替
window.location.href = '<%= Url.RouteUrl("Default", new { @Controller = "Feature", @Action = "Index"}) %>/' + $("#ProductId").val();
你的路由都搞砸了。 第二条路线的原因是什么: {controller}.mvc/{id}
...? 它与第一条路线冲突。
如果像/mycontroller/9a1347dc-60b0-4b3b-9570-9ed100b6bc6a
这样的URL进入路由引擎,将始终将其路由到{controller}/{action}/{id}
因为它首先位于列表中,并且可以将url映射到该路线,即没有路线限制,id是可选的。
如果我是你,我会删除第二条路线......如果你确实需要第二条路线,那么将它移动到第一条路线上方,然后在其上设置路线约束。
链接地址: http://www.djcxy.com/p/57853.html