在MVC应用程序中使用两个模型,一个在视图中,一个在局部中
本文关键字:一个 视图 局部 模型 两个 应用程序 MVC | 更新日期: 2023-09-27 18:11:27
我遇到了一些麻烦。我的观点如下
@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>
我有一个partial, _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]'.
正如@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。像这样的部分
@model MyViewModel
<div class ="mainC">
<div class = "leftContent">
@Html.Partial("_LeaderboardPartial", this.Model.Leaderboard)
</div>
....
如果您这样做,您应该更改foreach以遍历Model。post代替Model
@foreach (var item in this.Model.Posts)
这行代码:
第一个视图中的@Html.Partial("_LeaderboardPartial")
意味着沿着它自己的模型IEnumerable<Tipstr.Models.Posts>
发送到局部。
局部期望对IEnumerable<Tipstr.Models.Leaderboard>
类型的引用。
也许您需要一个视图模型,其中包含对这些类型中的一个的引用?