2010-03-09 99 views
0

我有一個MVC視圖,其中包含大量的部分視圖。這些部分視圖使用部分請求填充,因此視圖本身的控制器不會向它們傳遞任何數據。如果某個操作在另一個視圖中觸發,是否有可能在其中一個部分視圖中重新加載數據?例如,一個局部視圖有一個jqGrid,我想在用戶在這個網格中選擇一個新行時刷新另一個局部視圖中的數據。 有沒有這種情況下的代碼示例(在C#中),我可以看看我做錯了什麼?我使用ajax調用來觸發一個新的請求,但部分視圖中的非視圖被刷新,所以我不確定問題是否與路由,控制器有關,或者甚至根本不可能! 謝謝!ASP .NET MVC部分視圖和路由

回答

3

如果您的部分視圖操作返回ViewResult,則該響應將包含一個HTML塊。但是,Ajax調用不會自動將結果插入到DOM中,因爲結果可能是任意數量的格式,並且/或者在DOM更新之前可能需要額外的處理。因此,爲了獲得刷新的局部視圖,您需要將Ajax調用的結果插入DOM樹中的正確位置。

jQuery有一個漂亮的load()方法,它會爲你封裝這個過程。它將進行Ajax調用,獲取結果並替換選定元素的內部HTML。如果您需要以任何方式轉換結果,您甚至可以將它自己的函數傳遞給它,然後將它插入到DOM樹中。

附註:jQuery.load()strips scripts returned in the result。它確實保留它們以在某些場景中執行,但它甚至在其他場景中不執行它們。所以,如果你的部分視圖包含腳本,你可以考慮自己更新DOM樹。

所有這一切都與您的C#代碼無關,該代碼在服務器端運行。

但是,通過檢查請求是純HTML還是可以讓您的操作變得更加智能,因此結果將直接由瀏覽器呈現,或者如果是Ajax調用,結果將會是在進入DOM之前由您的腳本處理。該檢查使用Request擴展方法IsAjaxRequest完成。