2012-01-18 3 views
2

Я использую маршрут по умолчанию, так что мне не нужно указывать контроллер.ASP.NET MVC: Empty ActionLinks, отображающийся

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 после id, называемый страницей. Я тупо не включил его в пример, потому что я думал, что это не имеет значения. Если я выберу это, все будет работать.

Таким образом, на самом деле, это работает:

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 } 
); 

Почему нет?

+1

на какой версии IIS вы были развернуты как те же, что и локальные? – Serghei

+0

IIS6 на сервере, и локально его независимо от того, какой внутренний сервер Visual Studio 2010 запускается, и я считаю, что это IIS 7.5 – roryok

+0

вот в чем проблема: мой ответ ниже – Serghei

ответ

5

Найден ответ! В MVC3 есть ошибка в использовании двух последовательных необязательных UrlParameters, как описано Phil Haack, здесь routing-regression-with-two-consecutive-optional-url-parameters

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

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 
); 

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

+0

O M G. Большое вам спасибо. Я потратил час, пытаясь понять это. Я думал, что это вызвано поддоменой. –

+0

Это тоже помогло. См .: http://stackoverflow.com/questions/25782089/html-actionlink-not-working-in-production-environment/26024843 –

Смежные вопросы