我使用 viewmodel 来低音以列出要在强类型的部分视图中使用的对象列表,但发生了此错误



传递到字典中的模型项的类型为"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列表中的每个元素创建一个分部视图。

最新更新