Вызов Html.ActionLink с пользовательскими маршрутами, которые не работают должным образом в ASP.NET MVC 3 - PullRequest
1 голос
/ 22 июля 2011

У меня есть контроллер листингов с действием Index, который принимает необязательный параметр категории ...

public ActionResult Index(string category) { ... }

У меня есть стандартный маршрут по умолчанию в global.asax ...

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

Если я позвоню ...

@Html.ActionLink("Show All Listings", "Index", "Listings") 

... из представления (даже представления для того же действия с указанной категорией), я получу ссылку на "/Listings".

Если я позвоню ...

@Html.ActionLink("Show Listings for Category A", "Index", "Listings", new { category = "CategoryA" }, null)

... Я получу ссылку на "/ Listings? Category = CategoryA".Пока все хорошо.

Итак, я хотел бы создать собственный маршрут для указанной категории.Для этого я добавил собственный маршрут к global.asax как раз перед указанным выше маршрутом следующим образом:

routes.MapRoute(
    "ListingCategories",
    "listings/category/{category}",
    new { controller = "Listings", action = "Index" }
);

Теперь, если я позвоню ...

@Html.ActionLink("Show Listings for Category A", "Index", "Listings", new { category = "CategoryA" }, null)

... Я получухорошая ссылка "/ Listings / Category / CategoryA"

Но вот проблема.Если я позвоню ...

@Html.ActionLink("Show All Listings", "Index", "Listings")

... из представления вышеупомянутого действия с категорией = "CategoryA", генерируется ссылка "/ Listings / Category / CategoryA" вместо просто"/ предложения".Но когда я делаю тот же вызов из любого другого представления, ссылка генерируется нормально, как "/Listings".

Я пытался позвонить ...

@Html.ActionLink("Show All Listings", "Index", "Listings", new { category = "" }, null)

... и этопо-прежнему генерирует ссылку как "/ Listings / Category / CategoryA" при вызове из представления для действия, которое имело category = "CategoryA".Однако, если я задаю категорию для любой непустой строки, то она генерирует ссылку на правильную категорию (что бы я ни указывал).

Это ожидаемое поведение?

1 Ответ

1 голос
/ 22 июля 2011

Измените свой маршрут так, чтобы category был необязательным

routes.MapRoute(
    "ListingCategories",
    "listings/category/{category}",
    new { controller = "Listings", action = "Index", category = UrlParameter.Optional }
);

Ваш предыдущий маршрут делает категорию обязательной, поэтому ActionLink не соответствует этому маршруту, но вместо этого соответствует другому маршруту, например, По умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...