2012-04-19 4 views
2

私のサイトでは、ほぼすべてのページのデータベースからカテゴリのリストを表示することはできませんでした。当時、私はViewBagを使ってカテゴリを保存していましたが、もっと良い方法があるはずです。したがって、私はMVC3で再発生する要素を読み込む際のベストプラクティスについて疑問に思っています。MVC 3定期的に再現する要素...ベストプラクティス

ここにいくつかのコードです:

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

私はこれは私がレイアウトビューにロードすることを私の部分図である

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

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

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

} 

答えて

1

キャッシングを使用してカスタムHttpHelperを作成します。 ShowCategories()などがあります。次にビューや共通のレイアウトに配置してください:

@Html.ShowCategories() 
+0

興味深い!私はそれを探します。 –

関連する問題