28 votes

L'élément de modèle transmis au dictionnaire est de type '', mais ce dictionnaire nécessite un élément de modèle de type 'System.Collections.Generic.IEnumerable

Im vraiment nouveau pour mvc afin de jouer un peu dans l'obscurité ici. Je suis avec le magasin de musique exemple pour essayer d'apprendre mvc.

Im la création d'un livre de cuisine type de demande

J'ai créé mon ViewModel qui ressemble à ceci

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

mon contrôleur ressemble à ceci

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);
    }

Enfin de mon point de vue, ressemble à ceci

 @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>

J'obtiens cette erreur.

L'élément de modèle adopté dans le dictionnaire est de type 'CookMe_MVC.Viewmodel.CookMeIndexViewModel", mais ce dictionnaire nécessite un élément de modèle de type "Système".Les Collections.Génériques.IEnumerable`1[CookMe_MVC.Viewmodel.CookMeIndexViewModel]'.

J'ai suivi l'exemple cependant je ne peux pas voir ce que je fais de mal. J'ai donc en quelque sorte le retour de mon var viewModel une liste générique?

Toute aide serait super!!! TIA

42voto

Chandu Points 40028

Selon vous, vous utilisez @model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel> ce qui indique que le modèle attendu par la vue est de type IEnumerable de CookMeIndexViewModel.

Cependant, dans le contrôleur, vous passez un objet de type CookMeIndexViewModel en tant que modèle return View(viewModel); où l'erreur.

Soit changer la vue pour avoir @model CookMe_MVC.ViewModels.CookMeIndexViewModel

ou passez un IEnumerable de CookMeIndexViewModel comme modèle à la vue du contrôleur comme indiqué ci-dessous:

 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);
}
 

3voto

David Quinlan Points 41

J'ai eu ce message quand j'ai eu un conflit entre ce que l' @modèle de la directive dans le _Layout.cshtml vue de mise en page et une page intérieure" de la vue.

Le _Layout.cshtml avait la directive..

@model MyProject.Models.MyObject

Ma page intérieure avait...

@model IEnumerable<MyProject.Models.MyObject>

Je travaillais sur certains test / code de test et appuyez sur ce problème quand j'ai créé le nouveau contrôleur etc. C'est seulement lorsque j'ai renommé le Modèle Objet et compilé par la suite que j'ai trouvé la source du problème.

Espérons que cette aide.

Q.

1voto

dans kendo ui Grid do:

 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; }
    }
 

dans Integer.ascx dans le dossier Shared / EditorTemplate, procédez comme suit:

 <%@ 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)
%>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X