2012-03-07 102 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不引人注目的软件包。它仍然没有帮助。 刚刚从包管理器升级到最新版本的不显眼的库,它的工作!