1
我有以下代码(来自局部视图),它创建了一个链接列表,使我能够根据它们开始的字母来过滤列在我的索引页中的项目搭配:Html.ActionLink创建包含当前页面参数的链接
@{
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文件中设置以下路线:
/artists
/artists/a
/artists/b
…
等:
routes.MapRoute(
"",
"artists",
new { controller = "Artist", action = "Index" }
);
routes.MapRoute(
"",
"artists/{letter}",
new { controller = "Artist", action = "Index" },
new { letter = "[a-z]" }
);
所以对于上述局部视图创建应该是这个样子的链接路径上。在它忽视了路由和创建类似链接什么我越来越虽然是奇:现在
/artists
/artists?letter=a
/artists?letter=b
…
,如果我周围的路线的顺序调换,它产生的联系,因为我想他们,但后来我遇到另一个问题。如果我然后导航到/ artists/a(或任何其他字母),列表中的第一个链接将拾取字母参数的当前值并将其附加到列表中,所以我最终得到如下链接:
/artists/a
/artists/a
/artists/b
…
正如你所看到的,这使得它不可能要回,没有过滤索引。任何想法,我怎么可以修复路由,这样的链接正确创建无参数作为查询字符串传递,或修复ActionLink的,以不追加当前参数?
感谢。我已经尝试过,但路由“/ artists”未匹配,因为字母参数的约束意味着路由不匹配。如果我将其更改为[a-z]?它匹配,但接下来我遇到了第一条路线拾取字母参数的当前值相同的问题。 – 2011-06-08 08:06:58
尽量使约束'([A-Z])?'允许空值。 – DanielB 2011-06-08 08:12:03
@DanielB,我也试过了。然后,它会正确匹配“/ artists”路线,但会创建链接,将参数附加为查询字符串,而不是像“/ artists/a”一样。 – 2011-06-08 08:29:54