在我的一个页面上,我有一个for循环来遍历一个" Projects" (这是我网站的主要模型)并显示他们的一些数据。以下代码嵌套在表中,并删除了中间单元格以实现冗余。
foreach (var item in Model.Projects)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.SubmissionNumber)</td>
<td>@Html.DisplayFor(modelItem => item.Status)</td>
<!-- and so on -->
<td>@Html.ActionLink("Detail", "DisplayDetails", new { id = item.ProjectID })</td>
</tr>
}
&#34;细节&#34;理想情况下,最后一个单元格中的链接会弹出一个框(我想通过Bootstrap使用Modal),其中包含项目的所有数据。 &#34; DisplayDetails&#34; controller action返回一个显示此信息的局部视图,但由于我没有使用JavaScript或任何东西来呈现当前页面上的局部视图,因此它将其呈现为它自己的未格式化页面。这是控制器动作:
[HttpGet]
public ActionResult DisplayDetails(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Project project = db.Projects.Find(id);
if (project == null)
{
return HttpNotFound();
}
return PartialView("~/Views/Projects/_Detail.cshtml", project);
}
理想情况下,我会使用AJAX将ID传递给控制器,就像我在下面做的那样(这是我网站另一页的代码,再次编辑以删除减少量):
$("#show").on("click", function () {
$.ajax({
url: '/Projects/SearchTable',
type: "GET",
data: {
Line1: $('#' + '@Html.IdFor(m => m.Project.ProjectAddress.Line1)').val(),
// and so on
County: $('#' + '@Html.IdFor(m => m.Project.ProjectAddress.County)').val(),
}
}).done(function(partialViewResult) {
$(".wrapper").html(partialViewResult);
$(".wrapper").css('display', 'block');
});
});
通过这样做,我可以将局部视图嵌入到当前页面中,而不是将其作为新页面打开。我不知道如何将表中特定行的项目ID作为数据传递给控制器。这甚至可能吗?如果没有,是否有其他方法可以达到相同的结果?
答案 0 :(得分:1)
您可以将ActionLink替换为:
<td><a href="#" class="details" data-id="@item.ProjectID">Details</a></td>
然后,
$(".details").on("click", function (e) {
e.preventDefault();
var projectId = $(this).data('id');
// Make the AJAX call here...
});