Html.ActionLink создает ссылки, содержащие параметры с текущей страницы - PullRequest
1 голос
/ 08 июня 2011

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

@{
    string letters = "abcdefghijklmnopqrstuvwxyz";
}
<ul>
    <li>@Html.ActionLink("0–9", "Index")</li>
    @foreach (char c in letters.ToCharArray()) {
        <li>@Html.ActionLink(c.ToString().ToUpper(), "Index", new { letter = c.ToString() })</li>
    }
</ul>

Первая ссылка в списке предназначена для случаев, когда элементы начинаются с цифры.У меня также есть следующие маршруты, настроенные в моем файле Global.asax:

routes.MapRoute(
    "",
    "artists",
    new { controller = "Artist", action = "Index" }
);

routes.MapRoute(
    "",
    "artists/{letter}",
    new { controller = "Artist", action = "Index" },
    new { letter = "[a-z]" }
);

Таким образом, пути для ссылок, которые создает вышеуказанное частичное представление, должны выглядеть примерно так:

/artists
/artists/a
/artists/b
…

и так далее.Однако то, что я получаю, странно, так как игнорирует маршрутизацию и создает ссылки вроде:

/artists
/artists?letter=a
/artists?letter=b
…

Теперь, если я поменяю местами порядок маршрутов, он выдаст ссылки так, как я хочу, нотогда я сталкиваюсь с другой проблемой.Если я затем перейду к / artist / a (или любой другой букве), первая ссылка в списке забирает текущее значение параметра letter и добавляет его в список, поэтому я получаю ссылки типа:

/artists/a
/artists/a
/artists/b
…

Как видите, это делает невозможным возврат к индексу без фильтрации.Любые идеи относительно того, как я могу исправить маршрут так, чтобы ссылки создавались правильно без параметров, передаваемых в виде строки запроса, или исправить ActionLink, чтобы не добавлять текущий параметр?

1 Ответ

1 голос
/ 08 июня 2011

Сделайте только один маршрут и установите параметр {letter} как необязательный.

routes.MapRoute(
    "artists",
    "artists/{letter}",
    new { controller = "Artist", action = "Index", letter = UrlParameter.Optional },
    new { letter = "[a-z]" }
);

РЕДАКТИРОВАТЬ:

Посмотрите на этот пост .

РЕДАКТИРОВАТЬ2:

Другое возможное решение будет:

routes.MapRoute(
    "artists",
    "artists/{letter}",
    new { controller = "Artist", action = "Index", letter = "0" },
    new { letter = "[0a-z]" }
);

@Html.ActionLink("0–9", "Index", new { letter = "0"} );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...