У меня есть следующий код (из частичного представления), который создает список ссылок, позволяющих мне фильтровать элементы, перечисленные на моей странице указателя, в соответствии с буквой, с которой они начинаются:
@{
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, чтобы не добавлять текущий параметр?