2012-01-28 91 views
1

我有一個列出用戶(List.vbhtml)的頁面,並且每個用戶都有一個「編輯」鏈接。編輯鏈接發出Ajax請求:MVC 3:通過JavaScript在局部視圖和視圖之間進行通信

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

我的控制器中的Edit方法返回包含表單的分部視圖(_Edit)。表單提交後,我想隱藏編輯表單(不是問題),然後重新加載用戶列表。 這就是我所苦苦掙扎的。

如何讓父視圖(List.vbhtml)知道我應該重新加載列表(這將使用Ajax獲取請求完成)?

我不能從編輯分部視圖執行此操作,因爲編輯分部視圖不應該瞭解列表視圖,只能以其他方式(列表視圖瞭解部分視圖)瞭解。

我目前的解決方案是在List.vbhtml編輯在_Edit.vbhtml完成時提出一個自定義事件,並捕獲它:

_Edit.vbhtml:

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

名單.vbhtml

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

感謝

+0

一旦你的表單被提交,你不能只調用一個jQuery事件,如.remove()嗎? .remove()方法從DOM樹中移除元素。 – 2012-01-28 21:53:10

+0

這將實現隱藏編輯表單,這不是問題。 – 2012-01-28 21:56:42

回答

1

你可以使用jQuery。 ajaxComplete()事件處理程序。您必須檢查XHR方法是GET還是POST。獲取將在加載用戶編輯表單後發佈,POST將在其後進行。

因此,如果ajaxComplete在POST調用後觸發,那麼您應該通過Ajax刷新用戶列表。

+0

不是一個壞主意,但是我已經用我現在所做的更新了我的原始問題。我使用jQuery綁定/觸發器方法來引發事件。 – 2012-01-31 18:18:17