2009-11-09 240 views
4

我有一個MVC項目,其中我有一個提交按鈕的窗體。我添加了一個攔截表單提交事件的jquery客戶端處理程序。 javascript函數調用與沒有javascript的情況下調用的相同的MVC操作。Request.IsAjaxRequest返回false

$("form[action ='/List/CreateItem']").submit(
      function() { 
       $.post($(this).attr("action"), $(this).serialize(), function(response) { $("#results").html(response); }); 
       return false; 
      } 
      ); 

在MVC的行動,是所謂的,我測試Request.IsAjaxRequest決定是否返回一個視圖或JSON結果。我的問題是,Request.IsAjaxRequest返回false,即使我知道調用是從jquery函數進行的。 (我知道這是因爲如果我註釋掉jquery函數中的$ .post行,並且只留下返回false行,則不會發生任何反應。如果我取消註釋該行,該行爲將被執行 - 但它會返回視圖,因爲IsAjaxRequest是假)。

此行是否應使Request.IsAjaxRequest爲true?

+1

$ .post * does * set'X-Requested-With'因此'IsAjaxRequest' – 2009-11-09 19:34:09

+0

這篇文章可能會解決你的問題:http://www.britishdeveloper.co.uk/2010/10/aspnet-mvc- isajaxrequest-jquery.html – 2013-03-27 20:32:35

+1

我見過在通過ajax加載多個頁面部分時Request.IsAjaxRequest()隨機返回false的情況。我開始爲查詢添加'partial = 1'參數,並且'bool partial = Request.IsAjaxRequest()|| !string.IsNullOrEmpty(Request [「partial」]);'在控制器中確保在瀏覽Ajax調用和完整頁面時獲得部分頁面。 – 2013-07-18 09:13:46

回答

0

我不確定會有什麼區別,但是確定是否有可能的方法是使用像Fiddler這樣的HTTP分析工具(www.fiddlertool.com)並查找兩個調用之間可能存在的差異。

3

Request.IsAjaxRequest屬性應該反映X-Requested-With HTTP標頭的存在。這個頭是否真的發送到服務器?正如詹姆斯所建議的,嘗試用Fiddler或類似的代理服務器替代方案進行分析。

1

呃......我很抱歉。我不知道發生了什麼變化,但現在IsAjaxRequest返回true。我比較了我上面發佈的代碼和現在正在執行的代碼,我沒有看到任何區別。我之前一再對此產生誤解,現在我反覆說實話。當然,我錯過了一些東西,但我沒有看到它。

+0

這是瘋了,但同樣發生在我身上。好。反正我不介意。 – 2011-06-09 10:18:00