2015-03-12 3 views
-1

Si j'ouvre la grille avec le modèle, cela fonctionne. Mais si je passe le même modèle au partiel, ça ne marche pas. Il lance un message d'erreur disant.Modèle MVC Ne fonctionne pas

L'élément de modèle passé dans le dictionnaire est de type « Models.Asset », mais ce dictionnaire a besoin d'un élément de modèle de type « System.Collections.Generic.List`1

Ci-dessous est ma grille Kendo et ici est mon partielle

@Html.Partial("_Address", Model.Address) 

@(Html.Kendo().Grid(Model.Address) 
.Name("Grid") 
.Columns(columns => 
{ 
    columns.Bound(p => p.Id).Hidden(); 
    columns.Bound(p => p.Address).Width(300); 
    columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200); 
}) 
      .Events(events => 
        { 
         events.Save("onSave"); 
         events.Edit("onEdit"); 

        }) 
.Editable(editable => editable.Mode(GridEditMode.InLine)) 
.ToolBar(toolBar => 
    { 
     toolBar.Create().Text("Add Address"); 
    }) 
.Scrollable() 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .Events(events => events.Error("onError")) 
    .Model(model => model.Id(p => p.Address)) 
    .ServerOperation(false) 
) 
         ) 
+1

Ceci est un bon message d'erreur. cela veut dire qu'en haut de votre partiel vous avez défini votre modèle comme une liste mais que vous passez à Model.Address. Comme ils ne correspondent pas, il lance l'erreur –

+0

poster votre cshtml partielle – Joe

+0

@MattBodily Dans mon modèle, je déclare l'adresse comme liste

. – Chatra

Répondre

0

Comme dit Stehphen Muecke, modèle est nulle. Donc, je déclare mon partiel comme ci-dessous.

@Html.Partial("_Address", (Model.Address ?? new List<Address>)) 
+0

Un meilleur moyen serait d'avoir un constructeur sans paramètre pour 'Asset' qui initialise' Address' - i.e 'public Asset() {Adresse = nouvelle Liste

()}' –