在JavaScript函数中使用C#中的迭代变量进行循环

时间:2017-06-05 18:14:05

标签: javascript c# asp.net-mvc razor

在我的一个页面上,我有一个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作为数据传递给控制器​​。这甚至可能吗?如果没有,是否有其他方法可以达到相同的结果?

1 个答案:

答案 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...
});