2011-11-19 74 views
1

我有一个路线ASP.NET MVC的URL路由和寻呼用的HtmlHelper

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

我对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

我有另一条路线,但是在这之后 – multiv123

+0

约束正则表达式可能吗?尝试@“[A-Z]” –

+0

太好了。这解决了这个问题。现在我需要做到这一点,当用户点击该字母时,它会显示以该字母开头的用户名。我发布了我的控制器代码(参见上文)。 – multiv123