ASP.NET MVC URL-маршрутизация и разбиение на страницы с помощью HTMLHelper - PullRequest
1 голос
/ 19 ноября 2011

У меня есть маршрут

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
            );

Я пытаюсь сделать так, чтобы URL отображался как

/Contact/AlphaA
/Contact/AlphaB

для контактов на основе имени пользователя. Тем не менее, URL отображаются как: 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());
    }

Мой код контроллера для результата действия:

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 Ответ

1 голос
/ 19 ноября 2011

Есть ли у вас другие маршруты, которые предшествуют тому, который мы видим здесь?Первый соответствующий маршрут выигрывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...