1

私はMVC4とMVCだけで初めてです。

私はhomecontrollerとを持っていcategorycontrollerます。はcategorycontroller、モデルからcategoryIndexビューにデータを送信します。それはうまくいきます。

categorylistしかし今、利用可能なすべてのコントローラーにを追加したいと思います。

私はすでにこれを修正して、すべてのクラスreturn view(db.categorys.ToList());に追加categoryIndexし、共有フォルダーに追加しました。_layout.cshtml私は a@RenderPage("~/")` を追加していますが、これは機能します。

(db.categorys.ToList())しかし、リターンで以上を渡さなければならない場合、それはうまくいきません。

この問題を解決するにはどうすればよいですか。すべてのコントローラーとページを適切にカテゴリリストに追加するにはどうすればよいですか?

4

2 に答える 2

1

CategoryList(すべてのページの)ViewModelsにプロパティとしてコレクションを追加します。それを基本クラスに追加して、そこから継承することもできます。

public class Category
{
  public int ID { set;get;}
  public string Name { set;get;}
}
public class BasePageViewModel
{
  public List<Category> CategoryList { set;get;}

  BasePageViewModel()
  {
    CategoryList=new List<Category>();
  }
}

これで、この基本クラスから他のビューモデルを継承できます。

public class ProductViewModel : BasePageViewModel
{
  public string ProductName { set;get;}
  //Other properties
}

これで、ProductViewModelに強く型付けされたビューで、Html.Partialを呼び出してCategoryList部分ビューを表示できます。

@model ProductViewModel
<h3>This page is for product @Model.ProductName</h3>
@Html.Partial(Model.CategoryList)

CategoryListをレンダリングするための部分的なビューがあると仮定します

于 2012-11-21T14:24:51.120 に答える
0

カテゴリ リストなど、よく使用されるものは ViewBag に入れることをお勧めします。これにより、ある程度の分離が可能になり、必要なものだけをビューに戻すことができます。これが役に立ったことを願っています!

于 2012-11-21T14:20:01.227 に答える