gpt4 book ai didi

ajax - 使用 ajax 在 Controller 中调用 Action - 不起作用。 (ASP.Net MVC)

转载 作者:行者123 更新时间:2023-12-01 11:29:52 26 4
gpt4 key购买 nike

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

我正在对 Controller 的操作执行简单的 ajax 调用。该应用程序位于 EPiServer 中,但这似乎是关于在 ASP.NET 中使用 Ajax 的一般问题。

索引 View :

<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>

Controller - 家庭 Controller :

    [HttpPost]
public void SetCookie()
{
//Do stuff
}

我做过/尝试过的:

  1. 正确引用 jquery。

  2. 向操作添加了 [WebMethod] 属性

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

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

当我运行 web 应用程序并按下按钮时,Developer 工具中的调试器会告诉我

enter image description here

这很奇怪,因为在 HomeController 中有一个名为 SetCookie() 的操作/方法。并且出现“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”等前缀下,这样它就不太可能与任何内容路由发生冲突。

关于ajax - 使用 ajax 在 Controller 中调用 Action - 不起作用。 (ASP.Net MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33342708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com