ASP.NET MVC: появляются пустые ссылки ActionLink - PullRequest
2 голосов
/ 18 января 2012

Я использую маршрут по умолчанию, поэтому мне не нужно указывать контроллер.

routes.MapRoute(
    "Default", 
    "{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

С этим я могу создавать URL-адреса, такие как myapp.com/Customers, а не myapp.com/Home/Customers

Когда я тестирую локально, все нормально. Когда я загружаю живую версию, любые ссылки, созданные с помощью Html.ActionLink, пусты. Я знаю, что правильно использую Html.ActionLink, потому что он работает локально:

//                   Title                 Action      Controller
<%: Html.ActionLink("Manage My Settings", "Settings", "Home") %>

Я удалил все маршруты, кроме пути по умолчанию, попытался указать ActionLink с контроллером и без него и т. Д. Я даже попытался вернуться к наличию контроллера в маршруте, например:

"{controller}/{action}/{id}"

Ничего не работает вживую. Все работает локально. Схожу с ума.

UPDATE

ОК, сделал странное открытие. У меня на самом деле был еще один дополнительный UrlParameter после идентификатора, называемый page. Я тупо не включил это в пример, потому что думал, что это не имеет значения. Если я возьму это, вещи, кажется, работают.

Итак, на самом деле, это работает:

routes.MapRoute(
   "Default", 
   "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

и это работает!

routes.MapRoute(
   "Default", 
   "{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

но это делает не работает

routes.MapRoute(
   "Default", 
   "{action}/{id}/{page}", 
    new { controller = "Home", action = "Index", 
    id = UrlParameter.Optional, page = UrlParameter.Optional }
);

Почему бы и нет?

Ответы [ 2 ]

5 голосов
/ 19 января 2012

Нашел ответ!В MVC3 есть ошибка при использовании двух последовательных необязательных параметров UrlParameters, подробно изложенных Филом Хааком, здесь routing-regression-with-two-последовательно-необязательные-url-параметры

Сначала необходимообъявить версию маршрута только с одним необязательным параметром.Так что

routes.MapRoute(
    "Default", // Route name
    "{action}/{id}", // URL with ONE parameter
    new { controller = "Home", action = "Index", 
    id = UrlParameter.Optional } // Parameter defaults
);

routes.MapRoute(
    "Default_with_page", // Route name
    "{action}/{id}/{page}", // URL with TWO parameters
    new { controller = "Home", action = "Index", 
    id = UrlParameter.Optional, page = UrlParameter.Optional } 
    // Parameter defaults
);

Кажется действительно очевидным сейчас.Если бы я на самом деле включил все детали, я уверен, что Сергей или кто-то еще видел бы проблему, так что спасибо всем за помощь, ребята!

1 голос
/ 18 января 2012

посмотрите статью, в которой изложено , как развернуть приложение ASP.NET MVC на IIS6

...