J’ai récemment commencé à jouer avec ASP.net MVC (4), mais je ne peux pas me concentrer sur ce problème. Je suis sûr que c’est facile quand vous le savez.
J’essaie essentiellement de faire ce qui suit dans ma vue Index:
Donc j’ai pensé que j’avais besoin d’une vue partielle, et que j’ai créé comme suit (_CreateNote.cshtml):
@model QuickNotes.Models.Note @using (Html.BeginForm()) { @Html.ValidationSummary(true) }
Dans ma vue d’index d’origine (Index.cshtml), j’essaie de rendre cette vue partielle:
@model IEnumerable @{ ViewBag.Title = "Personal notes"; } Personal notes
@Html.ActionLink("Create New", "Create")
@Html.DisplayNameFor(model => model.Content) @foreach (var item in Model) { @Html.DisplayFor(modelItem => item.Content) @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | @Html.ActionLink("Details", "Details", new { id=item.ID }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID }) }
@Html.Partial("_CreateNote")
(en utilisant: @ Html.Partial (“_ CreateNote”)) Cependant. Cela ne semble pas fonctionner, car le message d’erreur suivant s’affiche:
Line 35: Line 36: Line 37: @Html.Partial("_CreateNote"); Line 38: Source File: c:\Dropbox\Projects\workspace .NET MVC\QuickNotes\QuickNotes\Views\Notes\Index.cshtml Line: 37 Stack Trace: [InvalidOperationException: The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[QuickNotes.Models.Note]', but this dictionary requires a model item of type 'QuickNotes.Models.Note'.] System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +405487
Mon NotesController ressemble à ceci:
public ActionResult Index() { var model = _db.Notes; return View(model); } // // GET: /Notes/Create public ActionResult Create() { return View(); } // // GET: /Notes/_CreateNote - Partial view public ViewResult _CreateNote() { return View("_CreateNote"); }
Je pense que cela a à voir avec le fait que la vue Index utilise le modèle différemment, comme dans @Model IEnumerable, mais peu importe comment je le modifie, en utilisant RenderPartial, RenderAction, en changeant ActionResult en ViewResult etc., je ne peux pas obtenir ça marche.
Des conseils seraient grandement appréciés! S’il vous plaît laissez-moi savoir si vous avez besoin de plus d’informations. Je serais heureux de compresser tout le projet si nécessaire.
Changez le code où vous chargez la vue partielle pour:
@Html.Partial("_CreateNote", new QuickNotes.Models.Note())
Ceci est dû au fait que la vue partielle attend une note mais reçoit le modèle de la vue parent qui est le IEnumerable
Vous transmettez le même modèle à la vue partielle en cours de transmission à la vue principale et ce sont des types différents. Le modèle est un DbSet
de Note
s, où vous devez passer une seule Note
.
Vous pouvez le faire en ajoutant un paramètre, que je suppose, car la forme de création serait une nouvelle Note
@Html.Partial("_CreateNote", new QuickNotes.Models.Note())