使用HTMLHelper进行ASP.NET MVC URL路由和分页

时间:2011-11-19 18:35:50

标签: asp.net asp.net-mvc asp.net-mvc-3

我有路线

routes.MapRoute(
                "AlphaPagedContacts", // Route name
                "Contact/Alpha{alpha}", // URL with parameters
                new { controller = "Contact", action = "AlphaList", alpha = UrlParameter.Optional },
                new { alpha = @"\A-Z" } // Parameter defaults
            );

我正在尝试将网址显示为

/Contact/AlphaA
/Contact/AlphaB

基于用户名的联系人。但是,网址显示为:http://localhost:54568/Contact/AlphaList?alpha=H

我的HTMLHelper是

@Html.AlphaLinks(new PagingModel { MaxPages = Model.MaxPages, CurrentLetter = Model.CurrentLetter, UrlGeneratorFunctionAlpha = i => Url.Action("AlphaList", new { alpha = i }) })

我的实施是

    public static MvcHtmlString AlphaLinks(this HtmlHelper helper, PagingModel model)
    {
        string[] letters = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
        var stringBuilder = new StringBuilder("<ul class='pager'>");

        foreach (string letter in letters)
        {
            stringBuilder.Append(String.Format("<li {2}><a href='{1}'>{0}<a></li>", letter, model.UrlGeneratorFunctionAlpha(letter), letter == model.CurrentLetter ? "class=Selected" : String.Empty));
        }
        stringBuilder.Append("</ul>");
        return MvcHtmlString.Create(stringBuilder.ToString());
    }

我对actionresult的控制器代码是:

public ActionResult AlphaList(string alpha = "A")
    {
        var logic = new ContactBUS();
        var pageSize = 10;

        var usernames = from c in XDocument.Load(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Contacts.xml")).Elements("Contact")
                        select new
                        {
                            Username = (string)c.Element("Username"),
                            Lastname = (string)c.Element("LastName"),
                            Firstname = (string)c.Element("FirstName"),
                            Email = (string)c.Element("Email"),
                        };

        var model = new AlphaListContactViewModel
        {
            Contacts = logic.GetContacts().Skip(0).Take(20).ToList(),
            CurrentLetter = alpha,
            MaxPages = (int)Math.Ceiling(logic.GetContactsCount() / (double)pageSize)
        };
        return View(model);
    }

知道为什么会这样吗? 此外,我需要这样做,以便当用户点击一个字母时,它会显示该字母的联系人用户名。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在我们看到的路线之前,您有其他路线吗?匹配胜利的第一条路线。