2011-07-25 56 views
1

我試圖填充一個div與MVC 3的局部視圖我的控制器看起來是這樣的:jQuery的AJAX工作返回MVC 3部分觀點,但jQuery的負載不

[HttpPost] 
public ActionResult GetCustomerList(string searchString) 
{ 
    var custService = new CustomerViewModels(); 
    var custListVM = custService.GetSearchList(searchString); 

    return PartialView("GetCustomersList", custListVM); 
} 

和我的jQuery看起來像這樣:

function getCustomerList(searchCriteria) { 
    $.ajax({ 
     url: 'Home/GetCustomerList', 
     type: 'POST', 
     async: false, 
     data: { searchString: searchCriteria }, 
     success: function (result) { 
      $("#customerTabBody").html(result); 
     } 
    }); 
}; 

它工作正常。我開始懷疑我是否可以使用jQuery的load方法做同樣的事情少了很多代碼,並寫了:

function getCustomerList(searchCriteria) { 
    $("#customerTabBody").load('Home/GetCustomerList', { searchString: searchCriteria }); 
}; 

它返回一個錯誤,說資源不能被發現。我試過使用@ Url.Action,但它編碼的是我用硬編碼的相同控制器路徑。在Firebug中,我可以看到發佈到的URL是相同的,並且searchString參數在兩個實例中的格式都相同。

有什麼區別 - 爲什麼加載不起作用?

感謝

+0

爲什麼在$ .ajax調用中設置async:false? – ShankarSangoli

+0

我需要讓用戶在等待響應時繼續輸入字符。 – BKahuna

回答

0

我相當肯定您的通話.load()執行GET請求而不是POST。 MVC 3和大多數其他.NET AJAX事務(作爲WebMethod裝飾的方法,例如Web服務和頁面方法)需要發佈數據。在這種情況下,你只需要堅持使用什麼。正如您在工作$ .ajax()調用中看到的,請求方法是POST。如果您想簡化一些代碼,請使用.ajaxSetup()加上.post()

+1

asp.net mvc控制器的action方法不要求每個ajax請求都被髮布,除非他們用'HttpPost'裝飾。唯一的例外是返回json結果的方法。即使在這種情況下,您也可以允許'返回Json(data,JsonRequestBehavior.AllowGet)'Get'請求;' –

+0

其實我也想知道。我嘗試用[HttpGet]裝飾我的控制器方法,但它仍然無法找到資源,所以我認爲它不重要。我還着眼於Firebug中的發佈和響應流量,它顯示了由jQuery負載生成的回發並顯示爲帖子(不是get)。 – BKahuna

2

jQuery的文檔爲load說...

The POST method is used if data is provided as an object; otherwise, GET is assumed. 

因爲你將數據作爲一個對象,它必須根據文檔後調用。而且,你正在通過$ .ajax從控制器獲取所需的數據,因此控制器操作方法似乎沒問題。使用load發送ajax請求時可能會出現一些錯誤。你可以在螢火蟲中檢查這個。

+0

我已經使用Firebog仔細查看發佈數據,並且目標控制器的URL在兩者中都是相同的,所以searchString鍵值對也是如此。 – BKahuna

+0

檢查firebug中的ajax請求的響應 –

1

你可以試試看它是否有效嗎?

function getCustomerList(searchCriteria) { 

     $('#customerTabBody').load('@Url.Action("GetCustomerList", "Home")', { 'searchString': searchCriteria }); 

};