0

我想使用两次@model 从我网站的另一部分获取数据是否可能?因为现在我遇到了错误,但是如果我只有第一个 @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

每个视图只能有一个模型。但是您可以使用另一个对象来声明模型:

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(组合您拥有的两个实体)然后基于该 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 回答