【问题标题】:Trouble With C# MVC Ajax requestC# MVC Ajax 请求的问题
【发布时间】: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 ',

标签: c# jquery ajax asp.net-mvc


【解决方案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问题,但现在我无法让它重定向到创建页面:(
    猜你喜欢
    • 2018-04-03
    • 2021-10-14
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多