Asp.net mvc MVC 3使用@model两次

Asp.net mvc MVC 3使用@model两次,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我想使用两次@model从我网站的另一部分获取数据,有可能吗?因为现在我有错误,但如果我只有第一个@model,一切都正常 看-> 错误2“SportsStore.Entities.Kategorie”不包含“Opis”的定义,并且找不到接受“SportsStore.Entities.Kategorie”类型的第一个参数的扩展方法“Opis”(是否缺少using指令或程序集引用?)c:\Users\Rafal\Desktop\MVC ksiązka\moj projekt\sklep\sport

我想使用两次@model从我网站的另一部分获取数据,有可能吗?因为现在我有错误,但如果我只有第一个@model,一切都正常

看->

错误2“SportsStore.Entities.Kategorie”不包含“Opis”的定义,并且找不到接受“SportsStore.Entities.Kategorie”类型的第一个参数的扩展方法“Opis”(是否缺少using指令或程序集引用?)c:\Users\Rafal\Desktop\MVC ksiązka\moj projekt\sklep\sportstore.WebUI\Views\Product\List.cshtml 16 4 sportstore.WebUI

@model IEnumerable
@模型IEnumerable
@{
ViewBag.Title=“列表”;
}
列表
@foreach(模型中的var p)
{
@p、 纳兹瓦
@p、 奥皮斯
@p、 Cena.ToString(“c”)
}

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

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

   public SomeViewModel(IEnumerable<Towar> towars, IEnumerable<Category> categories) {
     Towars = towars;
     Categories = categories;
   }
}
公共类SomeViewModel
{
公众可数拖车;
公共可数范畴;
公共SomeViewModel(IEnumerable towars、IEnumerable 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 *@
}
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 sportstore.Entities.SomeViewModel
@foreach(Model.Towars中的var项)
{
@p、 纳兹瓦
@p、 奥皮斯
@p、 Cena.ToString(“c”)
}
@foreach(Model.Categories中的var项){
@item.Name@*或您需要的东西*@
}

我还建议您在MVC中使用英文名称。阅读和理解更清晰;)

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

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

   public SomeViewModel(IEnumerable<Towar> towars, IEnumerable<Category> categories) {
     Towars = towars;
     Categories = categories;
   }
}
公共类SomeViewModel
{
公众可数拖车;
公共可数范畴;
公共SomeViewModel(IEnumerable towars、IEnumerable 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 *@
}
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 sportstore.Entities.SomeViewModel
@foreach(Model.Towars中的var项)
{
@p、 纳兹瓦
@p、 奥皮斯
@p、 Cena.ToString(“c”)
}
@foreach(Model.Categories中的var项){
@item.Name@*或您需要的东西*@
}

我还建议您在MVC中使用英文名称。阅读和理解更清晰;)

我认为创建一个ViewModel(组合您拥有的两个实体)然后基于该ViewModel创建一个视图是可行的。

我认为创建一个ViewModel(组合您拥有的两个实体)然后基于该ViewModel创建一个视图是可行的。

最好创建一个视图模型来表示您的数据。视图模型必须仅包含需要在视图上显示的内容。任何没有被使用的东西你都可以移除,没有存在的意义。您的视图模型可以如下所示:

@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 *@
}
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
}

最好创建一个视图模型来表示数据。视图模型必须仅包含需要在视图上显示的内容。任何没有被使用的东西你都可以移除,没有存在的意义。您的视图模型可以如下所示:

@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 *@
}
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
}