Das Modellelement ist vom Typ cookMeindexViewModel vom Typ, erfordert jedoch ein Modellelement vom Typ iEnumerable

StackOverflow https://stackoverflow.com/questions/4813307

Frage

Ich folge mit dem Beispiel für Music Store, um zu versuchen, ASP.NET MVC zu lernen. Ich erstelle eine Kochbuchanwendung.

Ich habe mein ViewModel erstellt, das so aussieht:

namespace CookMe_MVC.ViewModels
{
    public class CookMeIndexViewModel
    {
        public int NumberOfReceipes { get; set; }
        public List<string> ReceipeName { get; set; }
    }
}

Mein Controller sieht so aus

public ActionResult Index()
    {
        var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" };
       //create the view model
        var viewModel = new CookMeIndexViewModel
        {
            NumberOfReceipes = meals.Count(),
            ReceipeName = meals
        };
        return View(viewModel);
    }

Endlich sieht meine Ansicht so aus

 @model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th></th>
        <th>
            Meals
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
        <td>
            @item.ReceipeName
        </td>
    </tr>
}

</table>

Ich bekomme diesen Fehler.

Das in das Wörterbuch übergebene Modellelement ist vom Typ CookMeIndexViewModel, Aber dieses Wörterbuch erfordert ein Modellelement vom Typ Typ IEnumerable<CookMeIndexViewModel>.

Ich habe dem Beispiel gefolgt. Ich kann nicht sehen, was ich falsch mache. Sollte ich mein ViewModel als generische Liste zurückgeben?

War es hilfreich?

Lösung

In Ihrer Ansicht verwenden Sie @model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel> Dies weist darauf hin, dass das von der Ansicht erwartete Modell von Typ IEnumerable von CookMeNeNexViewModel ist.

Im Controller übergeben Sie jedoch ein Objekt vom Typ CookMeindexViewModel als Modell return View(viewModel); Daher der Fehler.

Entweder ändern die Ansicht, um zu haben @model CookMe_MVC.ViewModels.CookMeIndexViewModel

oder übergeben Sie ein iEnumerable von CookMeNeIndexViewModel als Modell an die Ansicht in Controller, wie unten angegeben:

public ActionResult Index()
{
        var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" };
     //create the view model
        var viewModel = new CookMeIndexViewModel
        {
                NumberOfReceipes = meals.Count(),
                ReceipeName = meals
        };
        List<CookMeIndexViewModel> viewModelList = new List<CookMeIndexViewModel>();
        viewModelList.Add(viewModel);
        return View(viewModelList);
}

Andere Tipps

Ich habe diese Nachricht erhalten, als ich einen Konflikt zwischen der @Model -Anweisung in der Layout -Ansicht _layout.cshtml und einer "inneren Seite" -Ane hatte.

Die _layout.cshtml hatte die Anweisung ..

@model MyProject.Models.MyObject

Meine innere Seite hatte ...

@model IEnumerable<MyProject.Models.MyObject>

Ich habe an einem Test- / Experimentcode gearbeitet und dieses Problem angegriffen, als ich einen neuen Controller usw. erstellt habe

Hoffe das hilft.

Q.

In Kendo UI Grid tun:

public class BookBean
    {
        [ScaffoldColumn(false)]
        public Int32 Id { set; get; }

        public String Title { set; get; }

        public String Author { set; get; }

        public String Publisher { set; get; }

        [UIHint("Integer")]
        public Int32 Price { set; get; }

        [UIHint("Integer")]
        public Int32 Instore { set; get; }

        [UIHint("Integer")]
        public Int32 GroupId { get; set; }
    }

In Integer.ascx im Ordner Shared/EditorTemplate: DO:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>

<%: Html.Kendo().IntegerTextBoxFor(m => m)
      .HtmlAttributes(new { style = "width:100%" })
      .Min(int.MinValue)
      .Max(int.MaxValue)
%>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top