2013-03-13 5 views
3

У меня есть область я назвал форумы, сейчас, в списке Тема страницы, у меня есть нить ссылки, которые генерируются так:ASP MVC - прослушивание маршрутов?

@Html.ActionLink(title, "Thread", "Forums", new { category = item.CategoryName, item = item.Id, page = 0 }, null) 

Теперь, когда я открываю нить, и я хочу, чтобы получить ссылка на текущем потоке внутри потока, я это делаю (в потоке):

@Html.ActionLink(title, "Thread", "Forums", new { category = Model.Post.CategoryName, item = Model.Post.ThreadId, page = Model.Page }, null) 

Обе нити список страниц и страницах находятся в одной и той же области. Теперь посмотрим на обоих actionlinks вместе:

1. @Html.ActionLink(title, "Thread", "Forums", new { category = Model.Post.CategoryName, item = Model.Post.ThreadId, page = Model.Page }, null) 
    2. @Html.ActionLink(title, "Thread", "Forums", new { category = item.CategoryName, item = item.Id, page = 0 }, null) 

Эти два actionlinks практически одинаковы (Model содержит действительные данные, я проверил), но они генерируют разные ссылки:

первый:

http://localhost:11227/Forums/Thread/1?category=Kosz&page=0 

второй один:

http://localhost:11227/Forums/Thread/Kosz/1/0 

Второй генерирует правильную ссылку, в то время как первый ... Я понятия не имею, что делает первый. Только Разница между ними - это место, где они выполняются, как я уже говорил выше, кулак выполняется в потоке, второй выполняется на странице списка нитей.

Что я могу сделать, чтобы исправить эту первую ссылку?

UPDATE: Добавлен маршрут:

context.MapRoute(
       "Forums_thread", 
       "Forums/{action}/{category}/{item}/{page}", 
       new { controller = "Forums", page = UrlParameter.Optional } 
      ); 

Второе обновление Я думаю, что я действительно нашел ошибку? Благодаря ответу Eilon, я узнал, что это:

@Html.ActionLink("something", "Thread", "Forums", new { category = "Kosz", item = Model.Post.ThreadId, page = Model.Page }, null) 

создает правильную ссылку, а это:

@Html.ActionLink("something", "Thread", "Forums", new { category = Model.Post.CategoryName, item = Model.Post.ThreadId, page = Model.Page }, null) 

генерирует некорректная ссылка (Model.Post.CategoryName еще "Kosz", хотя)! Я понятия не имею, что происходит ...

+1

Какие маршруты делают у вас есть, и что, ограничения у них есть? Кроме того, если вы выполняете * точный * тот же вызов на Html.ActionLink на каждом сайте, вы получаете те же результаты? – Eilon

+0

@Eilon: Я обновил сообщение своим маршрутом, это первый маршрут в моем списке маршрутов, поэтому с указанными параметрами в actionlinks он должен ударяться каждый раз. И, хм ... Ваш ответ дал мне что-то, я попробовал называть точный actionlink, и это дало мне тот же результат на обоих сайтах. Oo Gonna попытается сделать sth с этим сейчас ... – ojek

+0

вы можете попробовать '@ Html.ActionLink (« что-то »,« Тема »,« Форумы », new {category = Model.Post.CategoryName.ToString(), item = Model.Post.ThreadId, page = Model.Page}, null) 'таким образом будет гарантировано, что' Model.Post> CategoryName' не является нулевым – dakait

ответ

0

Исправьте маршрут ниже

context.MapRoute(
       "Forums_thread", 
       "Forums/{action}/{category}/{item}/{page}", 
       new { controller = "Forums",category="category", item="item",page = UrlParameter.Optional } 
      ); 
Смежные вопросы