这最终可能是一个比我想象的要简单得多的问题,但是这里......
我有一个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})
但是,我正在使用href属性打开一个模式窗口,该窗口将使用Html.RenderAction来显示来自Book控制器的适当表单。
这是 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>
由于我需要将id传递给 RenderAction 以使 Edit 方法起作用,因此我需要在foreach中单击的项目的值——但这不再在范围内。
我尝试在 BookManager 的 Details 方法中创建 ViewBag.SelectedBook,但值不是选定的书,而是 foreach 语句循环遍历并且最终的值是ViewBag.SelectedBook
书的计数。(例如,如果我在列表中有 3 本书,那么 ViewBag.SelectedBook 等于 3)。
我考虑过使用 JQuery 并在单击的项目上调用$(this),但随后我必须使用 Javascript 收集 BookID 并将其转换回 C# 以便在 Html.RenderAction 中收集它 - 这对于我正在尝试做的事情。
我将如何收集单击的项目的值并将其传递给模式中的Html.RenderAction?
谢谢!