我有路线
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);
}
知道为什么会这样吗? 此外,我需要这样做,以便当用户点击一个字母时,它会显示该字母的联系人用户名。 任何帮助将不胜感激。
答案 0 :(得分:1)
在我们看到的路线之前,您有其他路线吗?匹配胜利的第一条路线。