Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC: Dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1

I am getting this error and I'm not sure if I am able to do this, here is my code..

Application controller

public ActionResult AppView()
{
    List<Application> apps;
    using (ISiteDbContext context = _resolver.GetService<ISiteDbContext>())
    {
        apps = context.Applications.ToList();
    } 
    return PartialView("AppView", apps.OrderBy(a => a.Name).ToList());
}

Render partial - this is within a view which is in the home controller.

@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());} 

and my application view

@model IEnumerable<Example.Services.DAL.Application>

@{
    ViewBag.Title = "Applications";
}

<h2>Applications</h2>

<p>
    @Html.ActionLink("Add New Application", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
            @Html.ActionLink("Details", "Details", new { id = item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.ID })
        </td>
    </tr>
    }

</table>

full error message:

The model item passed into the dictionary is of type 'Example.Services.DAL.Application', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Example.Services.DAL.Application]'.

like image 482
Zi_31 Avatar asked Mar 17 '23 16:03

Zi_31


2 Answers

As error states you are passing a wrong type. Change

@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}

to:

@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new List<Example.Services.DAL.Application> { new Example.Services.DAL.Application() });}
like image 55
Vladimirs Avatar answered Mar 20 '23 05:03

Vladimirs


Your AppView.cshtml is bind to strongly type of @model IEnumerable<Example.Services.DAL.Application> and while calling this view you are passing @{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}

It should be the list object. You must pass list of Example.Services.DAL.Application()

Change your

@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}

to

@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new List<Example.Services.DAL.Application> { new Example.Services.DAL.Application() });}
like image 27
Ajay Avatar answered Mar 20 '23 07:03

Ajay