URL сопоставления ASP.NET MVC, отличные от {controller} / {action} с областями - PullRequest
1 голос
/ 12 марта 2009

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

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

Ответы [ 3 ]

1 голос
/ 12 марта 2009

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

<%= Html.RouteLink("your link", "Category-List", new {category = "foo"})%>
0 голосов
/ 12 марта 2009

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

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

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

0 голосов
/ 12 марта 2009

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

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