2013-04-30 53 views
0

我遇到了一些麻煩。我有一個觀點如下在MVC應用程序中使用兩個模型,一個在視圖中,一個在部分中

@model IEnumerable<Tipstr.Models.Posts> 

<div class ="mainC"> 
<div class = "leftContent"> 


    @Html.Partial("_LeaderboardPartial") 

</div> 
<div class = "rightContent"> 
@foreach (var item in Model) { 

     <h1 class ="ptitle"> 
     @Html.DisplayFor(modelItem => item.title) 
      </h1> 
    <p class ="date"> 
     posted @Html.DisplayFor(modelItem => item.date) 
    </p> 
<p class ="post"> 
     @Html.DisplayFor(modelItem => item.body) 
    </p> 
<hr /> 
} 
</div> 
</div> 
    <div class="Cpad"> 
     <br class="clear" /><div class="Cbottom"></div><div class="Cbottomright">       
    </div> 
    </div> 

而且我有一個部分,_LeaderboardPartial,如圖

@model IEnumerable<Tipstr.Models.Leaderboard> 


<table id="pattern-style-a" summary="Meeting Results"> 
<thead> 
    <tr> 
     <th scope="col">Username</th> 
     <th scope="col">Tipster Score</th> 

    </tr> 
</thead> 
<tbody> 
@foreach (var item in Model) { 



    <tr> 
     <td>@Html.DisplayFor(modelItem => item.userName)</td> 
     <td> @Html.DisplayFor(modelItem => item.score)</td> 

    </tr> 

} 
    </tbody> 
</table> 

我似乎無法得到它的工作,我認爲這是與傳遞一個模型從佈局,然後是另一個從部分。我怎樣才能解決這個問題?我收到以下錯誤:

傳遞到字典中的模型項目類型爲'System.Collections.Generic.List 1[Tipstr.Models.Posts]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [Tipstr.Models.Leaderboard]'。

+0

模型部分渲染時仍然是帖子視圖上使用的模型。你是否想渲染每篇文章的屬性? – devdigital 2013-04-30 15:54:39

回答

1

正如@大衛坦西說,你可以有一個包含兩個類型

public class MyViewModel 
{ 
    public MyViewModel(IEnumerable<Posts> posts, 
         IEnumerable<Leaderboard> leaderboard) 
    { 
     //you can add null checks to ensure view model invariants 

     this.Posts = posts; 
     this.Leaderboard = leaderboard; 
    } 

    public IEnumerable<Posts> Posts { get; private set; } 
    public IEnumerable<Leaderboard> Leaderboard{ get; private set; } 
} 

而在你的主視圖,你會打電話給Html.Partial這樣

@model MyViewModel 

<div class ="mainC"> 
<div class = "leftContent"> 


@Html.Partial("_LeaderboardPartial", this.Model.Leaderboard) 

</div> 
.... 
參考視圖模型

如果你這樣做,你應該改變foreach迭代Model.Posts而不是模型

@foreach (var item in this.Model.Posts) 
+0

我已經創建了視圖模型,但我不知道如何引用model.posts和model.leaderboard感謝您的幫助 – dunika 2013-04-30 16:42:16

0

這行代碼:

@Html.Partial("_LeaderboardPartial")在第一視圖中意味着沿其自身的模型IEnumerable<Tipstr.Models.Posts>到部分發送。

該部分需要參考類型IEnumerable<Tipstr.Models.Leaderboard>

也許你需要一個視圖模型,其中包含對這些類型之一的引用?

+0

好吧我試了 public class HomeViewModel { public IEnumerable Leaderboard {get;組; } public IEnumerable Posts {get;組; } } – dunika 2013-04-30 16:37:04

+0

我得到它的工作,但感謝指出我與視圖模型正確的方向 – dunika 2013-04-30 16:42:44

相關問題