使用ajax在控制器中调用操作-不起作用。(ASP.Net MVC)
我已经安静地与这个错误搏斗了一段时间,并且尝试了在网络上找到的所有建议,仍然没有运气 我正在对控制器的动作进行一个简单的ajax调用。应用程序位于EPiServer中,但这似乎是一个关于在ASP.NET中使用Ajax的一般性问题 索引视图:使用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(
<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
}
/默认情况下,ChrisRunepserver不会为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
。