ASP.net MVC 4で部分ビューを使用する
2023-08-18 05:50:53
質問
最近、ASP.net MVC (4)をいじり始めたのですが、この1つの問題で頭を抱えています。知っていれば簡単なことだと思うのですが。
私は本質的にインデックスビューで次のことをしようとしています。
- Index ビューで、データベース内の "Note" タイプの現在のアイテムをリストアップします (これは簡単です)。
- 同じIndexビューで新しいアイテムを作成する(それほど簡単ではありません)。
そこで、部分的なビューが必要だと考え、以下のように作成しました(_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ビュー(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のようにモデルの使い方が違うことが関係していると思うのですが、RenderPartial、RenderAction、ActionResultをViewResultに変更するなど、どう変えてもうまく行きません。
何かヒントがあれば、非常にありがたいです。 もっと情報が必要な場合は、私に知らせてください。必要であれば、私は喜んでプロジェクト全体を zip で圧縮します。
どのように解決するのですか?
パーシャルビューを読み込むコードを変更します。
@Html.Partial("_CreateNote", new QuickNotes.Models.Note())
これは、部分ビューがNoteを期待しているのに、親ビューのモデルであるIEnumerableを渡されるためです。
関連
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み】部分ビューから特定のセクションにコンテンツを注入する ASP.NET MVC 3 with Razor View Engine
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】C#で四捨五入する方法
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。