【问题标题】:Using two models in MVC application, one in a view and one in a partial在 MVC 应用程序中使用两种模型,一种在视图中,一种在局部中
【发布时间】:2013-05-01 01:00:53
【问题描述】:

我遇到了一些麻烦。我的看法如下

@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.List1[Tipstr.Models.Posts]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[Tipstr.Models.Leaderboard]”。

【问题讨论】:

  • 局部渲染时的模型仍将是帖子视图中使用的模型。您是否尝试呈现每个帖子的属性?

标签: c# asp.net-mvc razor


【解决方案1】:

正如@David Tansey 所说,您可以拥有一个包含对这两种类型的引用的视图模型

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 而不是 Model

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

【讨论】:

  • 我已经创建了视图模型,但是我不知道如何引用 model.posts 和 model.leaderboard 感谢您的帮助
【解决方案2】:

这行代码:

@Html.Partial("_LeaderboardPartial") 在第一个视图中意味着将其自己的模型 IEnumerable&lt;Tipstr.Models.Posts&gt; 发送到部分。

partial 需要对类型 IEnumerable&lt;Tipstr.Models.Leaderboard&gt; 的引用。

也许您需要一个包含对这些类型之一的引用的视图模型?

【讨论】:

  • 好的,我试过了 public class HomeViewModel { public IEnumerable Leaderboard { get;放; } 公共 IEnumerable 帖子 { 获取;放; } }
  • 我得到了它的工作,但感谢你用视图模型指出我正确的方向
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多