0

メイン ナビゲーションがあり、そのリスト アイテムの 1 つがアクションをレンダリングします。

[ChildActionOnly]
public ActionResult BuildMenu(String category = null) {
    ViewBag.SelectedCategory = category;
    return View("~/Views/Article/CategoriesList.cshtml", this.GetItems());
}

メソッドGetItemsは次のとおりです。

[NonAction]
public IEnumerable<String> GetItems() {
    return this.session.Query<Article>()
        .Select(x => x.Category)
        .Distinct().ToList()
        .OrderBy(x => x);
}

記事を投稿するとき、次のようにカテゴリを指定できます: Fringe Division. したがって、アドレスバーでは次のようになりFringe%20Divisionます。

ビュー(メニュー部分)内に私はこれを持っています:

@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>

category = Url.ToUrlFriendly(link)ここで(受け入れられないすべての文字をダッシュ​​または他の文字に置き換える)のようなものを適用すると、アドレスバーでクールに見えますが、コントローラーはカテゴリを認識しません(それは明らかです:元のものとは異なります):

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

どうすれば最善の方法で処理できますか?ありがとう!

4

3 に答える 3

0

これには、url に適したカテゴリの url 部分を格納するのが最善だと思いFringe Divisionますfringe-division。こうすることで、データベースと uri のカテゴリに対して永続化されます。

CMS がある場合は、この URL コンポーネントの生成を CMS の一部にすることができます。

于 2012-07-31T10:20:24.557 に答える
0

通常、カテゴリの URL フレンドリ名をデータベース内の追加の列として保持し、それに対してクエリを実行できるようにします。

于 2012-07-31T10:20:44.853 に答える
0

逆の順序でも行う必要があります。何かをエンコードする場合 (たとえば、スペースをダッシュ​​に置き換える)、デコードする必要があります (ダッシュをスペースに置き換える)。Server.Encode と同様で、Server.Decode とは反対です。Url.DecodeUrlFriendly 関数を記述します。ただし、文字列にすでにダッシュが含まれている場合は注意してください。

于 2012-07-31T10:19:48.380 に答える