ASP.NET MVC Маршрутизация и URL.Action - PullRequest
4 голосов
/ 20 сентября 2011

в одном из моих просмотров 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». enter image description here

Как я могу убедиться, что конфигурация маршрута в "DefaultIndex" проверена и URL-адрес

Ключ >> Значение
контроллер = функция
действие = индекс
id = 9a1347dc-60b0-4b3b-9570-9ed100b6bc6a

Редактировать 2

Изображение 2:

enter image description here

Редактировать 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 = '<% = Url.Action ("Index", "Feature"})%> /' + $ ("# ProductId"). Val ();

приведет к нескольким значениям Id

http://localhost:61000/Feature.mvc/9a1347dc-60b0-4b3b-9570-9ed100b6bc6a/3c5941e4-cb25-4d6f-9117-9ed100b4ca91

отображает существующий маршрут {id} в Url.Action ("Index", "Feature"}

в результате NoMatch

Введено

new {id = ""} чтобы обойти это.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Попробуйте использовать вместо Url.RouteUrl

window.location.href = '<%= Url.RouteUrl("Default", new { @Controller = "Feature", @Action = "Index"}) %>/' + $("#ProductId").val();
1 голос
/ 20 сентября 2011

Ваш маршрут все испорчен.В чем причина второго маршрута: {controller}.mvc/{id} ...?Это конфликтует с первым маршрутом.

Если URL-адрес, такой как /mycontroller/9a1347dc-60b0-4b3b-9570-9ed100b6bc6a, входит в механизм маршрутизации, всегда будет перенаправлять его на {controller}/{action}/{id}, поскольку он находится в списке первым, и URL-адрес может быть сопоставлен с этим маршрутом, т.е.нет никаких ограничений на маршрут, и id необязателен.

Если бы я был вами, я бы просто удалил второй маршрут ... если вам действительно нужен второй маршрут, переместите его выше первого маршрута и затем поместите маршрутограничение на это.

...