传递到字典中的模型项的类型为"System.Collections.Generic.List'1[MvcApplication1.Models.News]",但此字典需要类型为"MvcApplication1.Models.News"的模型项。
//my Controller
public class HomeController : Controller
{
CouncilDb _db=new CouncilDb() ;
public ActionResult Index()
{
var News = _db.News
.Take(10);
var Banner = (from r in _db.Banner orderby r.id descending select r).FirstOrDefault();
maz model = new maz();
model.Banner = Banner;
model.News = News.ToList();
return View(model);
}
protected override void Dispose(bool disposing)
{
if (_db != null)
{
_db.Dispose();
}
base.Dispose(disposing);
}
}
public class maz
{
public List<News> News { get; set; }
public Banner Banner { get; set; }
}
索引视图
@model MvcApplication1.Controllers.maz
@{
ViewBag.Title = "Home Page";
}
<!-- Banner -->
<!-- Banner -->
<div id="banner">
<h2> @Model.Banner.H2</h2>
<span class="byline"> @Model.Banner.Span </span>
</div>
@Html.Partial("_News",Model.News )
//部分视图
@model MvcApplication1.Models.News
<!-- Carousel -->
<div class="carousel">
<div class="reel">
<article>
<a class="image featured">
<img src="@Model.ImgUrl " alt="" /></a>
<header>
<h3>@Html.ActionLink(@Model.Title , "serch", "Home")</h3>
</header>
<p>@Model.Body </p>
</article>
</div>
</div>
模型的 .News
属性的类型为 List<News>
而不是News
,因此分部视图中的模型声明与传递给它的模型不匹配。
根据要实现的目标,可以在索引视图中循环浏览列表:
@foreach (var news in Model.News)
{
@Html.Partial("_News", news)
}
或调整部分视图模型声明并在那里循环
@model List<News>
....
@for (var news in Model)
{
<article>
<a class="image featured">
<img src="@news.ImgUrl" alt="" /></a>
<header>
<h3>@Html.ActionLink(@news.Title , "serch", "Home")</h3>
</header>
<p>@news.Body</p>
</article>
}
一旦你通过了通用语法,错误就非常简单了。在 C# 语言中,它是这样说的:
The model item passed into the dictionary is of type 'List<News>',
but this dictionary requires a model item of type 'News'.
您的分部视图是使用 @model
子句声明的,该子句指定类型为 News
的项:
@model MvcApplication1.Models.News
但是当您将数据传递给该部分视图时,您传入的是一个List<News>
:
@Html.Partial("_News",Model.News)
您可能想要的是一个循环(@foreach
或类似),它为News
列表中的每个元素创建一个分部视图。