2012-03-07 105 views
2

我正在使用Asp.net MVC3並嘗試向服務器做一個簡單的Ajax帖子,該服務器返回一個局部視圖並在搜索過程中更新我的項目列表。Request.IsAjaxRequest在MVC3中永不返回true

@using (Ajax.BeginForm("PartialUpdate", "Listing" 
     , new AjaxOptions { 
       UpdateTargetId = "ListPartialDiv", 
       HttpMethod = "GET", 
       InsertionMode = InsertionMode.Replace, 

     })) 
    { 
     <!-- Search Boxes and buttons here --> 
    } 

    <div id = "ListPartialDiv"> 
     @{ 
      Html.RenderPartial("_ListPartial", Model); 
     } 
    </div> 

ajax成功地調用服務器,服務器通過發送局部視圖來響應。但部分視圖總是在新頁面中呈現。我發現這是因爲它不知道它是一個ajax調用,所以它會呈現一個新頁面。我已經包含了正確的jQuery的ubobtrusive-ajax.min.js腳本,並添加了密鑰,根據This Question

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"> 

我的控制器代碼如下非常簡單:

 if (Request.IsAjaxRequest()) 
      return PartialView("_ListPartial", list); 

     return View("Index", list); 

但無論如何,Request.IsAjaxRequest()總是返回false。 我也使用了根據This Question的提琴手和螢火蟲,並沒有看到X-Requested-With標題,但我無法弄清楚這意味着什麼或如何改變它。我能想到的唯一的事情是,我看到的每個其他示例都使用jQuery的舊版本。這與它有什麼關係?謝謝你的幫助。

+0

您是否注意到瀏覽器實際上沒有在執行AJAX POST? – SLaks 2012-03-07 18:38:57

回答

7

你在jQuery之前加入了不顯眼的AJAX腳本,所以你的腳本都沒有工作。

+0

是的,即將鍵入相同的答案 – Blindy 2012-03-07 18:44:59

+0

釘住它!謝謝! – Dan 2012-03-07 18:50:22

0

請確保jquery.unobtrusive.ajax.js/jquery.unobtrusive.ajax.min.js腳本文件在其他jquery腳本文件之後被引用,並且確保您沒有每頁多次引用該文件你應該排序

1
var controllerContext = MockRepository.GenerateMock<ControllerContext>(); 
controllerContext.Expect(c => c.HttpContext.Request["X-Requested-With"]).Return("XMLHttpRequest"); 
controller.ControllerContext = controllerContext; 
0

你需要在這樣的jquery腳本後添加不顯眼的腳本。

bundles.Add(new ScriptBundle("~/bundles/searchDemo").Include(
       "~/Scripts/jquery-{version}.js", 
       "~/Scripts/jquery-ui-{version}.js", 
       "~/Scripts/jquery.unobtrusive*", 
       "~/Scripts/jquery.validate*")); 
0

我偶然發現了IsAjaxRequest()不起作用的情況。 我確信包含Microsoft不引人注目的軟件包。它仍然沒有幫助。 剛剛從包管理器升級到最新版本的不顯眼的庫,它的工作!