检查Request.IsAjaxRequest总是在我的asp.net mvc4中返回false

时间:2013-07-05 12:31:26

标签: c# asp.net-mvc

我的控制器里面有以下代码

public ActionResult Index(string searchTerm=null)
        {   System.Threading.Thread.Sleep(5000);
            var accountdefinition = repository.FindAccountDefinition(searchTerm).ToList();
            if (Request.IsAjaxRequest())
            { return PartialView("_CustomerTable",accountdefinition); }
        return View(accountdefinition);         
        }

但是如果我使用Ajax.beginform调用上面的操作方法,那么Request.IsAjaxRequest将返回false并且不会返回局部视图

@using (Ajax.BeginForm(
new AjaxOptions{
    HttpMethod= "get",
    InsertionMode=InsertionMode.Replace,
    LoadingElementId = "progress",
    UpdateTargetId="customerTable"}))
    {
<div style="float:right">Search <input placeholder="Search by name.." name="searchTerm" type="text"> <input class="btn btn-success" type="submit" value="search" /></div>               

}
<div id = "progress" class="loadingimage">
<img src="~/Content/Ajax-loader-bar.gif" />
</div>

3 个答案:

答案 0 :(得分:21)

在我看来,我没有包含 jquery.unobtrusive-ajax.min.js

答案 1 :(得分:3)

我遇到了这个问题并且不确定jquery.unobtrusive-ajax.min.js文件正在做什么黑魔法但是为我工作。当我遇到这个post时,我很高兴解释了这个非常简单的问题。

帖子的作者宣称有一个标题需要填充。

X-Requested-With => 'XMLHttpRequest'

对于发现此帖子的 Angular 用户,我添加了post上方的代码段。

var productsApp = angular.module('productsApp', []);

productsApp.config(['$httpProvider', function ($httpProvider) {
  $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
}]);

答案 2 :(得分:1)

嗨试试这个并改变你的观点,希望它对你有用

 @using (Ajax.BeginForm("Index", "controller", null, new AjaxOptions { HttpMethod = "post", InsertionMode = InsertionMode.Replace, LoadingElementId = "progress", UpdateTargetId = "customerTable" }))
        {
            <div style="float: right">
                Search
                <input placeholder="Search by name.." name="searchTerm" type="text">
                <input class="btn btn-success" type="submit" value="search" /></div>               

        }