在我的一个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的请求失败,因为路由认为“action”是“id”
如何确保“DefaultIndex”中的路由配置已验证且网址为
键&gt;&gt;值
controller =功能
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://localhost:61000/Product.mvc/List
****历史****
一直在使用+ $(“#ProductId”)。val(); =“/ domainname [虚拟目录别名] /Fewature.mvc/Index”+ $(“#ProductId”)。val();
总是有效,但我必须在发布到服务器域名[虚拟目录别名] /从开发到测试再到生产时更改所有脚本
试图简化它:
先前有以下声明:
window.location.href ='&lt;%= Url.Action(“Index”,“Feature”})%&gt; /'+ $(“#ProductId”)。val();
会产生多个Id值
它将现有路线{id}映射到Url.Action(“索引”,“功能”}
导致NoMatch
介绍
新{id =“”} 来解决它。
答案 0 :(得分:2)
尝试使用Url.RouteUrl
window.location.href = '<%= Url.RouteUrl("Default", new { @Controller = "Feature", @Action = "Index"}) %>/' + $("#ProductId").val();
答案 1 :(得分:1)
你的路由都搞砸了。第二条路线的原因是什么:{controller}.mvc/{id}
......?它与第一条路线发生冲突。
如果路由引擎中出现/mycontroller/9a1347dc-60b0-4b3b-9570-9ed100b6bc6a
之类的网址,则会始终将其路由到{controller}/{action}/{id}
,因为它是列表中的第一个,并且网址可以映射到该路由,即没有路由限制, id是可选的。
如果我是你,我会删除第二条路线...如果你真的需要第二条路线,那么将它移到第一条路线上方,然后对它施加路线约束。