我现在一直在努力解决这个错误,并尝试了网上发现的所有建议,但仍然没有运气。
我正在对控制器的动作进行简单的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>
控制器 - HomeController:
[HttpPost]
public void SetCookie()
{
//Do stuff
}
我做过/尝试过的事情:
正确引用jquery。
将[WebMethod]属性添加到操作
在Web.config中添加了一个Http模块(ScriptModule,用于EPiServer)
在引用jquery之后添加了对jquery.unobtrusive-ajax.js的引用。
当我运行webapplication并按下按钮时,Developer工具中的调试器告诉我
这很奇怪,因为在HomeController中有一个名为SetCookie()的动作/方法。并显示警告框“失败”,表示至少调用了js函数。
要么我失明了,要么缺少某些东西,或者还有其他需要做的事情......
欢迎所有建议,非常感谢。
/ ChrisRun
答案 0 :(得分:5)
默认情况下,EPiServer不会为MVC注册默认路由。这是因为你可以有一个名为&#34; Home&#34;在您的网站中与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路由放在&#34; webapi&#34;等前缀下。或&#34; api&#34;这样它就不太可能与任何内容路由冲突。
答案 1 :(得分:0)
只需更改您的方法:
public void SetCookie()
{
//Do stuff
}
到此:
public ActionResult SetCookie()
{
//Do stuff
}