バックグラウンド
ASP.NET MVCで部分ビューをレンダリングしようとすると、次のエラーが発生します。私はASP.NETMVCを初めて使用しますが、エラーは簡単に解決でき、完全に理解していないことが原因であると確信しています。
質問(すべてを読みたくない人のために):
このエラーの原因は何ですか?
例外
System.InvalidOperationException
の詳細::ディクショナリに渡されるモデルアイテムはタイプです'MyApp.Models.ClassroomFormViewModel'
が、このディクショナリにはタイプ'System.Collections.Generic.IEnumerable
1[MyApp.Models.ClassroomFormViewModel]'`のモデルアイテムが必要です。
エンティティ
親子関係を持つ2つのエンティティがあります。
教室StickyNote ------------ ----------- Id 1 -----Id 名前\名前 (...) \ コンテンツ ---- * 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);
%>