我有一个主/细节场景,其中主控是网格,细节是局部视图。我可以使用以下代码在表中添加一列,以便在单击时通过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)当量。感谢您的帮助,我相信您的解决方案也会帮助很多人!
答案 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();
}
});
}