这可能最终会成为一个比我要成功的问题更简单的问题,但是这里有......
我有一个 BookManager 类和一个 Book 类。 BookManager有很多书 - 这是使用CodeFirst通过EntityFramework设置的。
在BookManager的详细信息页面中,我使用 foreach 语句显示图书列表以及指向<的链接strong>编辑特定的书。
这是代码:
@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 <的相应表单/ strong>控制器。
以下是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 ?
谢谢!
答案 0 :(得分:3)
没有别的办法。
我的意思是......你试图让服务器端代码与客户端脚本进行交互。
由于您的模态对话框是在呈现页面时呈现的,因此您尝试的内容将无效。
我的建议是,通过控制器动作加载整个模态对话框,也许是这样的:
生成您的foreach链接,如下所示:
<a class="btn edit-book-link" data-toggle="modal" href="/ControllerName/BookForm/@item.BookID">
..让你的模态对话框div空白,如下所示:
<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>
<div id="modalContent"></div>
</div>
创建一个视图,该视图采用整数作为模型,例如,BookForm:
[HttpGet]
public ViewResult BookForm(int id) {
return View(id);
}
..然后,使用jQuery在每次点击时加载正确的表单:
$(function () {
$('.edit-book-link').click(function (e) {
$('#modalContent').load($(this).attr('href'), function() {
// show your modal dialog here using whatever method you use..
});
e.preventDefault();
return false;
});
});
然后在BookForm视图中,您可以使用ID生成表单。
希望我能正确理解你的问题。