因此我无法在C#控制器中调用我的函数。无论何时发出ajax请求,控制器都会自动重定向到控制器的主视图,即我的“索引”方法。如果我放置一个断点,该函数永远不会到达我的函数“收藏夹”,而只是重定向。我已经有一段时间了,只是看不出我做错了什么。谢谢。
这是我的ajax功能:
var updateFavorites = function (event) {
$.ajax({
type: 'Post',
url: baseUrl + '/Post/Favorite',
data: {
id: $(this).attr('data-id'),
isfavorite: $(this).attr('data-favorite')
},
success: function () { },
complete: function () { }
});
event.preventDefault();
这是我最喜欢的方法:
[System.Web.Mvc.HttpPost]
public JsonResult Favorite(int id, bool isfavorite)
{
"Code here..."
}
以下是默认视图:
public ActionResult Index()
{
"Code here..."
}
有没有人知道会发生什么?我一直在盯着我的代码,几个小时尝试不同的东西,但似乎无法找到错误。谢谢!
编辑:
以下是一些要求:
路由配置:
routes.MapRoute("SpecificPost", "Post/{title}/{action}",
new { controller = "Post", action = "Details", },
new { title = @".*" });
routes.MapRoute("Create", "Post/{action}",
new { controller = "Post", action = "Create", });
// MVC Default
routes.MapRoute("Default", "{controller}/{action}", new { controller = "Post", action = "Index" });
Html(这是按钮,不知道你还想要什么):
<span class ="btn favoriteButton" data-id="@Model.Id" data-favorite="@Model.IsFavorite">Favorite</span>
还有jquery:
$('.favoriteButton').click(updateFavorites);
答案 0 :(得分:0)
在我看来,以下路线定义将始终重定向到../Post/Create以匹配任何匹配“Post / {anything}”的路线
routes.MapRoute("Create", "Post/{action}",
new { controller = "Post", action = "Create", });
你可以完全删除这个路由定义,只要请求以Http'POST'的形式出现,就是默认路由:
routes.MapRoute("Default", "{controller}/{action}", new { controller = "Post", action = "Index" });
将正确地将“Post / Favorite”路由到PostController.Favorite()动作。
答案 1 :(得分:0)
问题出在我的路线上。我有太多的路线是模糊的,所以我的序列中的第一条路线是捕捉所有东西,使得我试图使用的URL不正确。我能够通过将所有收藏夹内容移动到新控制器并调用该控制器来解决问题。