在ASP.net MVC 4中使用部分视图

我最近开始使用ASP.net MVC(4),但我无法绕过我遇到的这个问题。 当你知道的时候,我相信这很容易。

我本质上是在我的索引视图中执行以下操作:

  1. 在索引视图中列出“注释”types的数据库中的当前项目(这很容易)
  2. 在相同的索引视图中创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。 该模型是NoteDbSet ,您需要传递一个Note

你可以通过添加一个参数来做到这一点,我猜,因为它的创buildforms将是一个新的Note

 @Html.Partial("_CreateNote", new QuickNotes.Models.Note())