2009-03-12 2 views
1

Я хочу, чтобы иметь возможность сопоставлять маршрут, используя URL-адрес, который не соответствует {controller}/{action}/{id} формат. Отображение выглядит следующим образом:URL-адреса ASP.NET MVC, отличающиеся от {controller}/{action} с областями

routes.CreateArea("Root", "MyApp.Web.Controllers", 
    routes.MapRoute("Category-List", "Category/{category}", 
     new { controller = "Category", action = "List" }), 
    routes.MapRoute("Default", "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = "" }) 
); 

Где у меня есть CategoryController с действием List(string category).

Я надеялся, чтобы иметь возможность использовать это на мой взгляд:

<%= Html.ActionLink<CategoryController>(
    c => c.List(category.UrlFriendlyName), 
    category.Name)%> 

(разрывы строк добавлены для читаемости)

Все это производит на связь с href="". Извлечение маршрута из области «Корень» дает правильный результат. Можно ли использовать этот тип сопоставления с общим помощником ActionLink или мне нужно использовать RouteLink или что-то подобное с жестко закодированными значениями?

Я также попытался следующие без успеха:

<%= Html.ActionLink(category.Name, "List", "Category", 
new { category = category.UrlFriendlyName }) %> 

ответ

0

По виду, что вы написали выглядит правильно для получения URL вы хотите. Вы пробовали использовать не строго типизированный метод Html.ActionLink, чтобы узнать, работает ли это?

+0

не был совершенно уверен, что это должно выглядеть, но это не работает: <% = Html.ActionLink (category.Name, "Список", "Категория", новый {категория = category.UrlFriendlyName})%> – roryf

+0

Это выглядит правильно, но они не использовали их какое-то время! Вы пытались установить значение по умолчанию для категории? –

0

Я ничего не вижу в вашем призыве к ActionLink, который заставит систему маршрутизации понять, какой маршрут использовать. Вместо этого я бы рекомендовал использовать Html. RouteLink, который позволяет указать маршрут по имени. Это обеспечит соответствие правильного маршрута.

Обновление: вы делаете ссылку по перекрестным ссылкам? (Другими словами, область, к которой вы привязаны, отличается от области, содержащей ссылку?) Если это так, вы должны указать область в своем вызове ActionLink/RouteLink. Если нет, работает ли RouteLink?

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

+0

Это приведет к его правилу из-за того, что это ссылка, использующая контроллер категории и действие «Список». –

+0

Нет, это совершенно неправильно, о чем свидетельствует тот факт, что он не работает. Зачем? Значения по умолчанию не приводят к сопоставлению маршрута; шаблон url делает. Значения по умолчанию используются, когда токен не предоставляется, а не когда он есть. –

+0

По умолчанию задают маршрут для соответствия. Значения по умолчанию переопределяются значениями, которые вы предоставляете. Если вы переопределяете категорию с категорией, она по-прежнему совпадает. –

1

Не идеален, но можете ли вы использовать подход к названию маршрута?

<%= Html.RouteLink("your link", "Category-List", new {category = "foo"})%> 
Смежные вопросы