Ich habe vor kurzem angefangen, mit ASP.net MVC (4) herumzuspielen, aber ich kann mich nicht um dieses eine Problem kümmern, das ich habe. Ich bin sicher, es ist einfach, wenn Sie es wissen.
Im Wesentlichen versuche ich in meiner Indexansicht Folgendes zu tun:
- Listen Sie die aktuellen Elemente in der Datenbank vom Typ "Hinweis" in der Indexansicht auf (das ist einfach).
- Erstellen neuer Elemente in derselben Indexansicht (nicht so einfach).
Also dachte ich, ich brauche eine Teilansicht, die ich wie folgt erstellt habe (_CreateNote.cshtml):
@model QuickNotes.Models.Note
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Note</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Content)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
In meiner ursprünglichen Indexansicht (Index.cshtml) versuche ich, diese Teilansicht zu rendern:
@model IEnumerable<QuickNotes.Models.Note>
@{
ViewBag.Title = "Personal notes";
}
<h2>Personal notes</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Content)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Content)
</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>
<div>
@Html.Partial("_CreateNote")
</div>
(using: @ Html.Partial ("_ CreateNote")) Allerdings. Dies scheint nicht zu funktionieren, da die folgende Fehlermeldung angezeigt wird:
Line 35:
Line 36: <div>
Line 37: @Html.Partial("_CreateNote");
Line 38: </div>
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
Mein NotesController sieht folgendermaßen aus:
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");
}
Ich denke, es hat damit zu tun, dass die Indexansicht das Modell anders verwendet, wie in @model IEnumerable, aber egal wie ich es ändere, mit RenderPartial, RenderAction, ActionResult in ViewResult usw. kann ich nicht bekommen es zu arbeiten.
Irgendwelche Tipps wären sehr dankbar! Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Bei Bedarf würde ich gerne das gesamte Projekt komprimieren.
quelle
Sie übergeben das gleiche Modell an die Teilansicht, das an die Hauptansicht übergeben wird, und es handelt sich um verschiedene Typen. Das Modell ist ein
DbSet
vonNote
s, bei dem Sie ein einzelnes übergeben müssenNote
.Sie können dies tun, indem Sie einen Parameter hinzufügen, der vermutlich ein neues Formular ist
Note
@Html.Partial("_CreateNote", new QuickNotes.Models.Note())
quelle