Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ajax在控制器中调用操作-不起作用。(ASP.Net MVC)_Ajax_Asp.net Mvc_Asp.net Ajax_Episerver - Fatal编程技术网

使用ajax在控制器中调用操作-不起作用。(ASP.Net MVC)

使用ajax在控制器中调用操作-不起作用。(ASP.Net MVC),ajax,asp.net-mvc,asp.net-ajax,episerver,Ajax,Asp.net Mvc,Asp.net Ajax,Episerver,我已经安静地与这个错误搏斗了一段时间,并且尝试了在网络上找到的所有建议,仍然没有运气 我正在对控制器的动作进行一个简单的ajax调用。应用程序位于EPiServer中,但这似乎是一个关于在ASP.NET中使用Ajax的一般性问题 索引视图: <input id="btnAjax" type="button" value="Favorite" /> <script> $('#btnAjax').click(function () { $.ajax(

我已经安静地与这个错误搏斗了一段时间,并且尝试了在网络上找到的所有建议,仍然没有运气

我正在对控制器的动作进行一个简单的ajax调用。应用程序位于EPiServer中,但这似乎是一个关于在ASP.NET中使用Ajax的一般性问题

索引视图:

<input id="btnAjax" type="button" value="Favorite" />

<script>
    $('#btnAjax').click(function () {
        $.ajax({
            url: '@Url.Action("SetCookie", "Home")',
            contentType: 'application/html; charset=utf-8',
            type: 'POST',
            dataType: 'html'    
        })
        .success(function (result) {
            alert("Success");
        })
        .error(function (xhr, status) {
            alert(status);
        })
    });
</script>
我所做/尝试的:

    [HttpPost]
    public void SetCookie()
    { 
        //Do stuff        
    }
  • 正确引用了jquery

  • 将[WebMethod]属性添加到操作中

  • 在Web.config中添加了一个Http模块(ScriptModule,用于EPiServer)

  • 在对jquery的引用之后添加了对jquery.unobtrusive-ajax.js的引用

  • 当我运行webapplication并按下按钮时,Developer工具中的调试器会告诉我

    这很奇怪,因为HomeController中有一个名为SetCookie()的操作/方法。警告框“Fail”显示,表示至少调用了js函数

    要么我瞎了眼,错过了什么,要么还有别的事情需要做

    欢迎提出所有建议,我们将不胜感激


    /默认情况下,ChrisRun

    epserver不会为MVC注册默认路由。这是因为您的站点中可能有一个名为“主页”的页面,该页面将与主页路径相冲突。通过覆盖RegisterRoutes方法,您可以自己在Global.asax中注册路由:

    protected override void RegisterRoutes(RouteCollection routes)
        {
            base.RegisterRoutes(routes);
    
            // Register a route for Web API
            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "webapi/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
    
            // Register a route for classic MVC to use for API calls
            routes.MapRoute(
                name: "API",
                url: "api/{controller}/{action}/{id}",
                defaults: new { action = "Index", id = UrlParameter.Optional });
        }
    

    我喜欢将MVC和Web API路由放在前缀下,例如“webapi”或“API”,这样就不太可能与任何内容路由冲突。

    只需更改您的方法:

    public void SetCookie()
    { 
        //Do stuff        
    }
    
    为此:

    public ActionResult SetCookie()
    { 
        //Do stuff        
    }
    

    如果将操作更改为
    HttpGet
    ,是否可以使用
    http://yourdomain/Home/SetCookie
    ?@ChrisRun您的客户端调用代码和托管在同一服务器/域下的web应用程序?安装一个名为Fiddler的程序,查看您的操作将收到什么请求,以及您将得到什么回复。出于测试目的,还可以从
    SetCookie
    返回
    OK