2012-08-04 35 views
0

我想使用兩次@model從我的網站的另一部分獲取數據可能嗎?因爲現在我有錯誤,但如果我只有這第一個@model一切工作正確。MVC 3使用@model兩次

看 - >MVC 3 - Exception Details: System.InvalidOperationException

錯誤2 'SportsStore.Entities.Kategorie' 不包含關於 'OPIS' 的定義和沒有擴展方法 'OPIS' 接受類型「SportsStore.Entities的第一個參數。可以找到'Kategorie'(你是否缺少使用指令或程序集引用?)c:\ Users \ Rafal \ Desktop \ MVCksią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> 
} 

回答

2

你只CAN H每個視圖一個模型。但是你可以用另一目的是declarate模型:

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中使用英文名字。閱讀和理解更清晰;)。

2

我認爲這將是一種情況來創建一個ViewModel(結合兩個實體),然後基於一個視圖關閉該ViewModel。

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 
}