J'ai un menu principal et l'un de ses éléments de liste rend une action:Routage ASP.NET MVC. Espaces blancs et les catégories
[ChildActionOnly]
public ActionResult BuildMenu(String category = null) {
ViewBag.SelectedCategory = category;
return View("~/Views/Article/CategoriesList.cshtml", this.GetItems());
}
Où GetItems
méthode est:
[NonAction]
public IEnumerable<String> GetItems() {
return this.session.Query<Article>()
.Select(x => x.Category)
.Distinct().ToList()
.OrderBy(x => x);
}
Lorsque vous rédigez un article on peut spécifier la catégorie comme ceci: Fringe Division
. Donc, dans la barre d'adresse, il ressemble à Fringe%20Division
.
l'intérieur d'une vue (menu partiel) J'ai ceci:
@model IEnumerable<String>
@{ Layout = null; }
<ul class="transparent-custom">
@foreach(var link in Model) {
<li>@Html.RouteLink(
link,
new {
controller = "Article", action = "Index",
category = link
},
new {
@class = link == ViewBag.SelectedCategory ? "selected" : ""
}
)
</li>
}
</ul>
Si je demande ici quelque chose comme category = Url.ToUrlFriendly(link)
(remplaçant tous les caractères inacceptables avec des tirets, ou avec tout autre caractères), alors qu'il a l'air cool dans la barre d'adresse mon contrôleur ne reconnaît pas la catégorie (et qui est évidente: il se distingue de son original):
public ActionResult Index(String category, Int32? page) {
// there's no such a category in DB...
ViewBag.CurrentCategory = category;
if(category == "All") {
return View(this.GetAllArticles().ToPagedList(page ?? 1, this.PageSize));
}
var entries = this.session.Query<Article>()
.Where(c => c.Category == category)
.OrderBy(d => d.CreatedOn);
return View(entries.ToPagedList(page ?? 1, this.PageSize));
}
Comment puis-je gérer la meilleure façon? Merci!