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

上一篇: ASP.NET MVC Routing and URL.Action

下一篇: ASP.NET MVC Controller Unit Testing