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

MVC 3: Communicating between partial view and view via JavaScript

本文关键字:视图 之间 通信 通过 JavaScript MVC      更新时间:2023-09-26

我有一个列出用户的页面(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();
});

感谢

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

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