使用 ajax 在 Controller 中调用 Action - 不起作用。 (ASP.Net MVC)
Invoking Action in Controller using ajax - not working. (ASP.Net MVC)
我已经安静地解决这个错误一段时间了,并尝试了在网上找到的所有建议,仍然没有运气。
我正在对控制器的操作进行简单的 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
}
我有done/tried:
正确引用 jquery。
向操作添加了 [WebMethod] 属性
在Web.config中添加了一个 Http 模块(ScriptModule,用于 EPiServer)
在 jquery.
之后添加了对 jquery.unobtrusive-ajax.js 的引用
当我 运行 Web 应用程序并按下按钮时,Developer 工具中的调试器告诉我
这很奇怪,因为在 HomeController 中有一个名为 SetCookie() 的 action/method。并且出现警告框"Fail",说明至少调用了js函数
要么我瞎了,错过了什么,要么还有其他事情需要做...
欢迎并非常感谢所有建议。
/克里斯润
EPiServer默认没有为MVC注册默认路由。这是因为您的站点中可能有一个名为 "Home" 的页面与 Home 路由冲突。您可以通过覆盖 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
}
我已经安静地解决这个错误一段时间了,并尝试了在网上找到的所有建议,仍然没有运气。
我正在对控制器的操作进行简单的 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
}
我有done/tried:
正确引用 jquery。
向操作添加了 [WebMethod] 属性
在Web.config中添加了一个 Http 模块(ScriptModule,用于 EPiServer)
在 jquery.
之后添加了对 jquery.unobtrusive-ajax.js 的引用
当我 运行 Web 应用程序并按下按钮时,Developer 工具中的调试器告诉我
这很奇怪,因为在 HomeController 中有一个名为 SetCookie() 的 action/method。并且出现警告框"Fail",说明至少调用了js函数
要么我瞎了,错过了什么,要么还有其他事情需要做...
欢迎并非常感谢所有建议。
/克里斯润
EPiServer默认没有为MVC注册默认路由。这是因为您的站点中可能有一个名为 "Home" 的页面与 Home 路由冲突。您可以通过覆盖 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
}