为啥我对控制器方法的简单 ajax 调用不起作用?

Posted

技术标签:

【中文标题】为啥我对控制器方法的简单 ajax 调用不起作用?【英文标题】:Why my simple ajax call to a controller method is not working?为什么我对控制器方法的简单 ajax 调用不起作用? 【发布时间】:2021-08-02 18:43:04 【问题描述】:

我刚开始使用 ASP .NET MVC。 我正在尝试使用 jQuery ajax 调用 POST 操作方法,如下所示,但我的 Controller 方法没有被命中。 下面的js函数由按钮的onclick()调用。

function ValidateLogin() 
    var dat = ;
    dat.Username = $("#username_input").val();
    dat.Password = $("#password_input").val();
    dat.PreviousActionName = '';
    if (dat.Password != '' && dat.Username != '') 
        $.ajax(
            url: '/Login/ValidateLogin',        //Tried '@Url.Action("ValidateLogin", "Login")' as well
            type: 'POST',
            data: JSON.stringify(dat),
            contentType: 'application/json',
            dataType: 'json',
            success: function () 
                alert("Success!");
            ,
            error: function (xhr, status, error) 
                var err = xhr.responseText;
                alert("Failed");
            
        );
    

这是我的登录模型

public class LoginModel
    
        public String Username  get; set; 
        public String Password  get; set; 
        public String PreviousActionName  get; set; 
    

和登录控制器:

public class LoginController : Controller
    
        // GET: Login
        [HttpGet]
        public ActionResult Login()
        
            return View();
        
        [HttpPost]
        public ActionResult ValidateLogin(LoginModel loginModel)
        
            String Username = loginModel.Username;
            String Password = loginModel.Password;
            return View("Login");
        
    

注意:我在 IIS 中本地托管此项目,名称为“客户端”。 所以初始 URL 将是 http://localhost/Client 当我在 AJAX url 中使用“/Login/ValidateLogin”时,最终 URL 是 http://localhost/Login/ValidateLogin,在这种情况下,我在浏览器控制台中找不到 http://localhost/Login/ValidateLogin。所以我将 ajax 中的 url 更改为“Client/Login/ValidateLogin”。现在它只是ajax中的错误函数。

如果有帮助,这是我的 RouteConfig 类:

public class RouteConfig
    
        public static void RegisterRoutes(RouteCollection routes)
        
            routes.IgnoreRoute("resource.axd/*pathInfo");
            routes.MapMvcAttributeRoutes();
            routes.MapRoute(
                name: "Default",
                url: "controller/action/id",
                defaults: new  controller = "Login", action = "Login", id = UrlParameter.Optional 
            );
        
    

我做错了什么。请帮忙! 提前致谢。

【问题讨论】:

“现在它只是 ajax 中的错误函数。” - 如果你检查它的参数,“错误函数” 可能会告诉你问题而不是仅仅提醒“失败”。 @Andreas 我在浏览器中调试过。错误函数的所有参数都是'undefined'。 如果 jQuery 触发了error 回调,那么它们都不会是undefined 对不起,我该怎么做? 【参考方案1】:

试试这个语法

$.ajax(
            url: '/Client/Login/ValidateLogin',        
            type: 'POST',
            data: dat,
            success: function (result)  
               ///  $('#result').html(result);
                alert("Success!");
            ,
            error: function (xhr, status, error) 
                var err = xhr.responseText;
                alert(err);
            
        );

当你使用 Ajax 时,你必须使用 div 和 partialview 而不是 view 来返回

【讨论】:

感谢您的回答。我只将 url 更改为“Client/Login/ValidateLogin”。现在我的 post 方法受到了打击,但我仍然收到来自 ajax 错误的 Failed 警报。我会按照你的建议使用 partialview。 你必须尝试使用​​整个代码,而不仅仅是更改 url 我已经尝试过了,现在我从控制器方法返回了 ContentResult,并且在 ajax 的成功函数中,我正在导航到我想要的位置。一直以来我都看不到我在 Success 函数中除了 alert 之外没有写任何东西。 控制器中的 ajax 调用现在工作了吗? 我休息了一下。是的,ajax 调用运行良好,仅在 chrome 中。在 Firefox 中,调用了控制器 POST 方法,但我仍然收到错误警报。我检查了浏览器工具并检查了网络部分的响应。状态为 200,正常。但在此之后,我在浏览器控制台中得到了一些以 abort 开头的 JSON 日志。事件侦听器断点日志已启用。 JSON登录控制台详情img

以上是关于为啥我对控制器方法的简单 ajax 调用不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Jquery Ajax 调用不起作用?(Asp.net MVC C#)

ASP.NET MVC RedirectToAction 在从视图中发布 AJAX 后不起作用

ajax调用中的输入值不起作用

使用 Jquery 的同步“Ajax”调用似乎不起作用

为啥引导工具提示在引导模式中不起作用?

使用ajax在codeigniter控制器中调用函数不起作用