在ASP.net MVC 4中使用部分视图
我最近开始使用ASP.net MVC(4),但我无法绕过我遇到的这个问题。 当你知道的时候,我相信这很容易。
我本质上是在我的索引视图中执行以下操作:
- 在索引视图中列出“注释”types的数据库中的当前项目(这很容易)
- 在相同的索引视图中创build新的项目(并不那么容易)。
所以我想我需要一个局部视图,而且我已经创build如下(_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> }
在我原来的索引视图(Index.cshtml)我试图呈现这个局部视图:
@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>
(使用:@ Html.Partial(“_ CreateNote”))然而。 这似乎不工作,因为我收到以下错误信息:
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
我的NotesController看起来像这样:
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"); }
我认为这与Index视图使用模型的方式不同,就像在@model IEnumerable中那样,但是不pipe怎样改变它,使用RenderPartial,RenderAction,改变ActionResult到ViewResult等,我都无法得到它的工作。
任何提示将非常感谢! 如果您需要更多信息,请让我知道。 如果需要的话,我很乐意把整个项目压缩。
将加载部分视图的代码更改为:
@Html.Partial("_CreateNote", new QuickNotes.Models.Note())
这是因为部分视图需要注释,但是正在传递父视图的模型,即IEnumerable
您将传递给主视图的同一模型传递给分部视图,它们是不同的types。 该模型是Note
的DbSet
,您需要传递一个Note
。
你可以通过添加一个参数来做到这一点,我猜,因为它的创buildforms将是一个新的Note
@Html.Partial("_CreateNote", new QuickNotes.Models.Note())