在ASP.NET MVC中使用部分视图
背景
尝试在ASP.NET MVC中呈现分部视图时,我收到以下错误。 我是ASP.NET MVC的新手,我确信这个错误很容易解决,只是源于我缺乏完整的理解。
问题 (对于那些不想阅读所有内容的人):
什么导致了这个错误?
异常详细信息: System.InvalidOperationException
:传递给字典的模型项类型为'MyApp.Models.ClassroomFormViewModel'
但此字典需要类型为'System.Collections.Generic.IEnumerable
1 [MyApp.Models.ClassroomFormViewModel]'的模型项`。
的entites
我有两个父/子关系的实体。
Classroom StickyNote ------------ ----------- Id 1 ----- Id Name Name (...) Content ---- * ClassroomID
模型
在Model
,StickyNote内容保存在不同的表中,并通过以下方法访问(使用Linq-to-SQL
:
public IQueryable<StickyNote> GetStickyNotesByClassroom(Classroom classroom)
{
return from stickynote in db.StickyNotes
where stickynote.ClassroomID == classroom.ID
select stickynote;
}
错误
我已经为显示StickyNote
内容创建了一个局部视图,因为它属于它所在的教室。 我遇到的问题是我无法显示它,并收到以下错误:
传递到字典中的模型项类型为: 'MyApp.Models.ClassroomFormViewModel'
但是此字典需要类型为'System.Collections.Generic.IEnumerable
1 [MyApp.Models.ClassroomFormViewModel]'的模型项。 说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。
异常详细信息: System.InvalidOperationException
:传递给字典的模型项类型为'MyApp.Models.ClassroomFormViewModel'
但此字典需要类型为'System.Collections.Generic.IEnumerable
1 [MyApp.Models.ClassroomFormViewModel]'的模型项`。
部分视图
以下是部分视图代码:
<%@ Control Language="C#" Inherits="
System.Web.Mvc.ViewUserControl<IEnumerable<MyApp.Models.ClassroomFormViewModel>>" %>
<table background="../../images/corkboard.jpg">
<% foreach (var items in Model) { %>
<tr>
<% foreach (var item in items.StickyNotes) { %>
<td><div class="sticky_note_container">
<!-- actually use a post it note here on the page -->
<div class="sticky_note">
<div class="sticky_note_content">
<!-- content of sticky note here -->
<% Html.ActionLink(item.Name, "ShowStickyNoteContent"); %>
<!-- end of content of sticky note -->
</div>
</div>
<div class="sticky_note_footer"> </div>
<br clear="all" />
</div>
</td>
<% } %>
</tr>
<% } %>
</table>
父视图
另一个视图中的代码调用它:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits=
"System.Web.Mvc.ViewPage<MyApp.Models.ClassroomFormViewModel>" %>
{...}
<%
Html.RenderPartial("StickyNotes", Model);
%>
你正将ClassroomFormViewModel的单个实例传递给View,并期待着一个集合,即IEnumerable<ClassroomFormViewModel>.
将PartialView中的声明更改为
Inherits="
System.Web.Mvc.ViewUserControl<MyApp.Models.ClassroomFormViewModel>"
要么
你真正想要的是(真正查看你的代码之后)是一个IEnumerable<ClassroomFormViewModel>
所以你的调用页面中的模型需要IEnumerable<ClassroomFormViewModel>
基本上你正在尝试这样做
public void Render(ClassroomFormViewModel model)
{
RenderPartial(model) //Cannot cast single instance into an IEnumerable
}
public string RenderPartial(IEnumerable<ClassroomFormViewModel> model)
{
//Do something
}
你的部分应该开始
<%@ Control Language="C#" Inherits="
System.Web.Mvc.ViewUserControl<MyApp.Models.ClassroomFormViewModel>" >
我想你想在你的页面上显示一个教室。 如果你想显示更多,那么不要使用视图模型列表。 使用一个包含教室列表的视图模型
链接地址: http://www.djcxy.com/p/39021.html