0

Web サイトの別の部分からデータを取得するために @model を 2 回使用したいのですが、可能ですか? エラーが発生しましたが、この最初の @model のみがあれば、すべてが正しく機能します。

見て -> MVC 3 - 例外の詳細: System.InvalidOperationException

エラー 2 'SportsStore.Entities.Kategorie' には 'Opis' の定義が含まれておらず、タイプ 'SportsStore.Entities.Kategorie' の最初の引数を受け入れる拡張メソッド 'Opis' が見つかりませんでした (using ディレクティブまたはアセンブリ参照?) c:\Users\Rafal\Desktop\MVC ksiązka\moj projekt\sklep\SportsStore.WebUI\Views\Product\List.cshtml 16 4 SportsStore.WebUI

@model IEnumerable<SportsStore.Entities.Towar>
@model IEnumerable<SportsStore.Entities.Kategorie>


@{
    ViewBag.Title = "List";
}

<h2>List</h2>

@foreach (var p in Model)
{
    <div class="item">
         <h3>@p.Nazwa</h3>
         @p.Opis
         <h4>@p.Cena.ToString("c")</h4>
    </div>
}
4

3 に答える 3

2

ビューごとにモデルを 1 つだけ持つことができます。ただし、別のオブジェクトを使用してモデルを宣言できます。

public class SomeViewModel
{
   public IEnumerable<Towar> Towars;
   public IEnumerable<Category> Categories;

   public SomeViewModel(IEnumerable<Towar> towars, IEnumerable<Category> categories) {
     Towars = towars;
     Categories = categories;
   }
}

そして、次のようにビューで使用します。

@model SportsStore.Entities.SomeViewModel

@foreach (var item in Model.Towars)
{
  <div class="item">
    <h3>@p.Nazwa</h3>
    @p.Opis
    <h4>@p.Cena.ToString("c")</h4>
  </div>
}
@foreach (var item in Model.Categories) {
  @item.Name @* or what you need down here *@
}

また、MVC では英語名を使用することをお勧めします。読んで理解するのがより明確です;)。

于 2012-08-04T12:54:14.963 に答える
2

これは、ViewModel を作成し (2 つのエンティティを結合するため)、その ViewModel に基づいて View を作成するケースになると思います。

于 2012-08-04T12:54:34.917 に答える
1

データを表すビュー モデルを作成することをお勧めします。ビュー モデルには、ビューに表示する必要があるものだけを含める必要があります。使用しないものは削除できますが、そこにある意味はありません。ビュー モデルは次のようになります。

using SportsStore.Entities;

public class YourViewModel
{
     public IEnumerable<Towar> Towars { get; set; }

     public IEnumerable<Kategorie> Categories { get; set; }  // I assume this is categories
}

このビューモデルを作成ビューで使用する必要があるとしましょう。作成アクションは次のようになります。

public class YourController : Controller
{
     private readonly ITowarRepository towarRepository;
     private readonly ICategoryRepository categoryRepository;

     public YourController(ITowarRepository towarRepository, ICategoryRepository categoryRepository)
     {
          this.towarRepository = towarRepository;
          this.categoryRepository = categoryRepository;
     }

     public ActionResult Create()
     {
          YourViewModel viewModel = new YourViewModel
          {
               Towars = towarRepository.GetAll(),
               Categories = categoryRepository.GetAll()
          };

          return View(viewModel);
     }
}

そして、あなたの見解では:

@model YourProject.DomainModel.ViewModels.YourViewModel

@foreach (var towar in Model.Towars)
{
     // Do whatever
}

@foreach (var category in Model.Categories)
{
     // Do whatever
}
于 2012-08-06T17:04:59.027 に答える