相当于Ajax.ActionLink与主/详细情景中javascript的路由值

时间:2012-01-09 17:23:18

标签: javascript jquery asp.net-mvc-3

我有一个主/细节场景,其中主控是网格,细节是局部视图。我可以使用以下代码在表中添加一列,以便在单击时通过ajax加载详细信息:

 @Ajax.ActionLink(("details", "ViewDetails", new { id = item.Id}, new AjaxOptions { 
            UpdateTargetId="ProjectDetails", 
            Url=Url.Action("ViewDetails"), 
            LoadingElementId="ProjectDetailsLoading", 
            LoadingElementDuration=2000 })

但如果我想在行选择中显示详细信息怎么办?好吧,我有一个OnRowSelected()事件,我可以挂钩客户端,并提取我需要发送回ViewDetails操作的ID,如下所示:

<script type="text/javascript">
function onRowSelected(e) {
    ID = e.row.cells[0].innerHTML; 

    // now what?  How do I form the equivalent of Ajax.ActionLink?
}
</script>

这篇文章:Ajax.ActionLink triggering from Javascript?展示了如何使用$ .get()来触发ajax回发,但它没有说明如何在服务器端指定所有内容(包括我需要发送的Id)当量。感谢您的帮助,我相信您的解决方案也会帮助很多人!

1 个答案:

答案 0 :(得分:0)

不知道您正在讨论什么网格和onRowSelected事件,但您可以在网格的第一个单元格内使用HTML5 data- *属性。例如,如果您可以控制其渲染,则可以将隐藏的div或直接放在相应的<tr>内。实际上你在这里需要的只是行动的网址。

所以这是一个隐藏div的示例,您可以将其放在每行的第一个单元格中:

<div style="display:none;" data-url="@Url.Action("details", "ViewDetails", new { id = item.Id })"></div>

然后很容易:

function onRowSelected(e) {
    var url = $('div', e.row.cells[0]).data('url');
    $('#ProjectDetailsLoading').show();
    $.ajax({
        url: url,
        type: 'GET',
        cache: false,
        success: function(result) {
            $('#ProjectDetails').html(result);
        }
        complete: function() {
            $('#ProjectDetailsLoading').hide();
        }
    });
}