MVC 3:通过JavaScript在部分视图和视图之间进行通信

时间:2012-01-28 21:45:09

标签: javascript model-view-controller

我有一个列出用户的页面(List.vbhtml),每个用户都有一个“编辑”链接。编辑链接发出Ajax请求:

@Ajax.ActionLink("Edit", "Edit", "Player", New With {.id = currentItem.PlayerId}, New AjaxOptions() with { .UpdateTargetId="edit"})

我的控制器中的Edit方法返回包含表单的局部视图(_Edit)。表单提交后,我想隐藏编辑表单(不是问题),然后重新加载用户列表。 这就是我正在努力的方法。

如何让父视图(List.vbhtml)知道我应该重新加载列表(这将使用Ajax Get请求完成)?

我不能从编辑局部视图中执行此操作,因为编辑局部视图不应该知道列表视图,只是相反(列表视图知道局部视图)。

我目前的解决方案是在_Edit.vbhtml中完成编辑时引发自定义事件,并在List.vbhtml中捕获它:

_Edit.vbhtml:

//let anyone listening know the edit is complete
$(document).trigger('PersonEditComplete');

List.vbhtml

//when player edit is complete, reload the player list
$(document).bind('PersonEditComplete', function () {
    Player.List.Reload();
});

由于

1 个答案:

答案 0 :(得分:1)

您可以使用jQuery。ajaxComplete()事件处理程序。您必须检查XHR方法是GET还是POST。获取将在加载用户编辑表单后,POST将在提交后进行。

因此,如果ajaxComplete在POST调用后触发,那么你应该通过Ajax刷新用户列表。