Html.ActionLink Включая дополнительные параметры - PullRequest
0 голосов
/ 05 декабря 2011

Используя следующий код:

@Html.ActionLink("News", "Index", new { controller = "News", area = "" }, new { @class = "News" })

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

http://mywebsite/News/2011/12/2/my_slug

где параметры соответствуют странице, на которой я сейчас нахожусь. Это также происходит на других контроллерах, соответствующих той же схеме URL (представьте, что у меня есть другой контроллер под названием Presentations, который полностью соответствует схеме URL News). На страницах презентаций ссылка на новости будет содержать параметры презентаций, которые не являются допустимыми для контроллера новостей. Имеет смысл?

Мои маршруты определены как:

        routes.MapRoute(
            "News-Archive", // Route name
            "News/Archive", // URL with parameters
            new { controller = "News", action = "Archive" }, // Parameter defaults
            new[] { "mywebsite.Controllers" }
        );

        routes.MapRoute(
            "News-Stub", // Route name
            "News/{year}/{month}/{date}/{slug}", // URL with parameters
            new { controller = "News", action = "Index" }, // Parameter defaults
            new[] { "mywebsite.Controllers" }
        );

        routes.MapRoute(
            "News-ByDay", // Route name
            "News/{year}/{month}/{day}", // URL with parameters
            new { controller = "News", action = "Archive" }, // Parameter defaults
            new[] { "mywebsite.Controllers" }
        );

        routes.MapRoute(
          "News-ByMonth", // Route name
          "News/{year}/{month}", // URL with parameters
          new { controller = "News", action = "Archive" }, // Parameter defaults
          new[] { "mywebsite.Controllers" }
        );

        routes.MapRoute(
          "News-ByYear", // Route name
          "News/{year}", // URL with parameters
          new { controller = "News", action = "Archive" }, // Parameter defaults
          new[] { "mywebsite.Controllers" }
        );

        routes.MapRoute(
          "News-Default", // Route name
          "News", // URL with parameters
          new { controller = "News", action = "Index" }, // Parameter defaults
          new[] { "mywebsite.Controllers" }
        );

Может кто-нибудь объяснить, кроется ли проблема в моем использовании Html.ActionLink или в моих определениях маршрутов?

EDIT:

Изменение ссылки на действие на:

@Html.ActionLink("News", "Index", new { controller = "News", area = "", year = string.Empty, month = string.Empty, day = string.Empty, slug = string.Empty}, null)

приводит к этому при вызове со страницы презентации (эти значения относятся к презентации, а не к действительному элементу новостей):

http://mywebsite/News?year=2011&month=12&slug=seo_overview

Не уверен, почему это приводит к изменению переписывания.

1 Ответ

0 голосов
/ 05 декабря 2011

Ссылка действия предполагает наличие текущего слага, так как слаг не был предоставлен:

Использовать

 ActionLink("News", "Index", new { controller = "News", area = "", slug="newslug"}, new { @class = "News" })

или

 ActionLink("News", "Index", new { controller = "News", area = "", slug = null}, new { @class = "News" })

Существует вероятность, что настройка слага= null также будет повторно использовать текущий слаг, в этом случае установите slug = Empty String.

...