2

私のサイトでは、ほとんどすべてのページにデータベースからのカテゴリのリストを表示したくありません。現時点では、ViewBag を使用してカテゴリを保存していますが、もっと良い方法があるはずです。したがって、MVC3 で繰り返し発生する要素を読み込むときのベスト プラクティスについて疑問に思っています。

ここにいくつかのコードがあります:

public class HomeController : Controller
{
    private AlltForMusikContext db = new AlltForMusikContext();

    //
    // GET: /Admin/

    public ViewResult Index()
    {
        var ads = db.Ads.Include(a => a.Category).OrderByDescending(a => a.Date);
        ViewBag.Categories = db.Categories.ToList();
        return View(ads.ToList());
    }

    public ViewResult Category(int id)
    {
        var ads = db.Ads.Where(a => a.Category.CategoryId == id).OrderByDescending(a => a.Date);
        ViewBag.Categories = db.Categories.ToList();
        ViewBag.Category = db.Categories.Where(a => a.CategoryId == id).FirstOrDefault();
        return View(ads.ToList());
    }
}

このコードを _Layout.cshtml で使用します

 @Html.Partial("_GetCategories", (IEnumerable<AlltForMusik.Models.Category>)@ViewBag.Categories)

これは、レイアウト ビューにロードした部分的なビューです。

@model IEnumerable<AlltForMusik.Models.Category>

@foreach (var cat in Model)
{
<img src="@Url.Content("~/Content/img/icon_arrow.gif")" /> 
@Html.ActionLink(cat.CategoryName, "Category", "Home", new { id = cat.CategoryId })<br />
}

これは機能しますが、ビューをロードするたびにカテゴリを ViewBag にロードする必要があります。そうしないと、エラーが発生します。

このようなコンテンツをロードする最良の方法は何ですか?

答え:

アドバイスに従い、HtmlHelper を使用しました。System.Web.Mvc ではなく System.Web.Webpages で HtmlHelper を参照していたため、最初はいくつかの問題に遭遇しました。私が使用しているコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AlltForMusik.Models;
using System.Web.Mvc;

namespace AlltForMusik.Helpers
{
public static class HtmlHelpers
{


    public static string GetCategories(this HtmlHelper helper)
    {
        AlltForMusikContext db = new AlltForMusikContext();
        var categories = db.Categories.OrderBy(a => a.CategoryName).ToList();
        string htmlOutput = "";

        foreach (var item in categories)
        {
            htmlOutput += item.CategoryName + "<br />";
        }

        return htmlOutput.ToString();
    }
}

}
4

1 に答える 1

1

キャッシングを使用してカスタムHttpHelperを作成します。たとえば、ShowCategories()。次に、それをビューまたは次のような一般的なレイアウトに配置します。

@Html.ShowCategories()
于 2012-04-19T20:52:03.653 に答える