これは、私が考えているよりもはるかに単純な問題になる可能性がありますが、ここでは...
BookManagerクラスとBookクラスがあります。BookManager には多くの本があります。これは、CodeFirst を使用して EntityFramework を介してセットアップされます。
BookManagerの[詳細]ページでは、 foreachステートメントを使用して、書籍のリストと、特定の書籍を編集するためのリンクを表示しています。
そのコードは次のとおりです。
@foreach (var item in Model.Books)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.BookName)
</td>
<td>
@Html.DisplayFor(modelItem => item.BookNumber)
</td>
<td>
<a class="btn" data-toggle="modal" href="#BookEditModal" @{ViewBag.SelectedBook = item.BookID}>
<i class="icon-edit"></i>
Edit
</a>
</td>
</tr>
}
トリッキーな部分は次のとおりです。
<a class="btn" data-toggle="modal" href="#BookEditModal" @{ViewBag.SelectedBook = item.BookID} >
<i class="icon-edit"></i>
Edit
</a>
通常、私は次のようなことをします: href="@Url.Action("Edit", "Book", new { id = item.BookID})
ただし、Html.RenderActionを使用してBookコントローラーからの適切なフォームを表示するモーダル ウィンドウを開くには、 href属性を使用しています。
以下は、BookManager の詳細ページの下部に含まれるモーダル ウィンドウです。
<div class="modal hide fade in" id="BookEditModal" )>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>Edit Book</h3>
</div>
@using (Html.BeginForm("Edit", "Book", FormMethod.Post))
{
<div class="modal-body">
@{ Html.RenderAction("Edit", "Book", new { id = ViewBag.SelectedBook}); }
</div>
}
</div>
Edit メソッドを機能させるにはIDを RenderAction に渡す必要があるため、 foreachでクリックされた項目の値が必要ですが、それはもはやスコープ外です。
BookManager の Details メソッド内で ViewBag.SelectedBook を作成しようとしましたが、値が選択された本ではなく、代わりに foreach ステートメントがループし、値が本数になりますViewBag.SelectedBook
。(例: リストに 3 つの本がある場合、ViewBag.SelectedBook は 3 に等しい)。
私は JQuery を使用して、クリックされた項目で$(this)を呼び出すことを考えましたが、Javascript で BookID を収集し、それを C# に変換して Html.RenderAction で収集する必要があります。私がやろうとしていること。
クリックされたアイテムの値を収集し、それをモーダルにあるHtml.RenderActionに渡すにはどうすればよいですか?
ありがとう!