C# MVC Ajax 请求的问题

Posted

技术标签:

【中文标题】C# MVC Ajax 请求的问题【英文标题】:Trouble With C# MVC Ajax request 【发布时间】:2014-07-22 22:48:14 【问题描述】:

所以我无法在我的 C# 控制器中调用我的函数。每当发出 ajax 请求时,控制器都会自动重定向到控制器的主视图,即我的“Index”方法。如果我设置断点,该函数永远不会到达我的函数“Favorite”,而只是重定向。我已经有一段时间了,只是不明白我做错了什么。谢谢。

这是我的 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);

【问题讨论】:

我假设收藏夹方法在 PostController 中?您是否还可以添加路由表以确保在路由到达 PostController 之前没有任何东西拦截? 你的路由配置文件中有什么 您是通过按下按钮来执行此操作的,问题可能是提交正在执行。你能提供HTML吗? 更新了我的帖子以获取所需的代码!谢谢! 确保你的按钮看起来像这样 ,你也可以留下你正在调用的 url,如下 url:'Favorite ', 【参考方案1】:

问题出在我的路线之内。我有太多不明确的路由,所以我序列中的第一条路由捕获了所有内容,使我尝试使用的 URL 不正确。我能够通过将所有收藏夹内容移动到新控制器并改为调用该控制器来解决问题。

【讨论】:

【参考方案2】:

在我看来,以下路由定义将始终重定向到 ../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" );

将正确地将“发布/收藏”路由到 PostController.Favorite() 操作。

【讨论】:

我试过了,但现在收藏夹和创建路由都不起作用。 所以,这实际上解决了Favorite问题,但现在我无法让它重定向到创建页面:(

以上是关于C# MVC Ajax 请求的问题的主要内容,如果未能解决你的问题,请参考以下文章

针对具有 IdentityServer3 授权的 MVC 控制器的 Ajax 请求中的 CORS

Ajax.BeginForm 处理两个不同的 onSuccess 响应,MVC 5,C#

MVC 3 / Jquery AJAX / Session Expires / C# - 在 ajax 调用期间处理会话超时

将参数传递给 ajax 发布请求会返回错误

AJAX 回调未显示成功消息 - ASP.NET MVC C#

在 ASP.NET MVC 中使用 AJAX 方法时使用 C# 控制器重定向到页面