MVC ajax post to controller 操作方法

我一直在查看这里的问题:https://stackoverflow.com/questions/4120212/mvc-ajax-json-post-to-controller-action-method,但不幸的是,它似乎帮不了我。我的情况几乎完全一样,除了我的方法签名(但我已经试过了,仍然没有命中)。

jQuery

$('#loginBtn').click(function(e) {
    e.preventDefault();

    // TODO: Validate input

    var data = {
        username: $('#username').val().trim(),
        password: $('#password').val()
    };

    $.ajax({
        type: "POST",
        url: "http://localhost:50061/checkin/app/login",
        content: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify(data),
        success: function(d) {
            if (d.success == true)
                window.location = "index.html";
            else {}
        },
        error: function (xhr, textStatus, errorThrown) {
            // TODO: Show error
        }
    });
});

Controller

[HttpPost]
[AllowAnonymous]
public JsonResult Login(string username, string password)
{
    string error = "";
    if (!WebSecurity.IsAccountLockedOut(username, 3, 60 * 60))
    {
        if (WebSecurity.Login(username, password))
            return Json("'Success':'true'");
        error = "The user name or password provided is incorrect.";
    }
    else
        error = "Too many failed login attempts. Please try again later.";

    return Json(String.Format("'Success':'false','Error':'{0}'", error));
}

然而,无论我怎么尝试,我的 "控制器 "始终无法启动。通过调试,我知道它发送了请求,只是每次都会出现 "未找到 "错误。

解决办法

您的 Action 期待的是字符串参数,但您发送的是复合对象。

您需要创建一个与发送内容相匹配的对象。

public class Data
{
    public string username { get;set; }
    public string password { get;set; }
}

public JsonResult Login(Data data)
{
}

EDIT

此外,toStringify() 可能不是你想要的。只需发送对象本身即可。

data: data,
评论(0)

这是因为您发送的是一个对象,而您期望的是两个参数。

试试这个就知道了:

public class UserDetails
{
   public string username { get; set; }
   public string password { get; set; }
}

public JsonResult Login(UserDetails data)
{
   string error = "";
   //the rest of your code
}
评论(2)
$('#loginBtn').click(function(e) {
    e.preventDefault(); /// it should not have this code or else it wont continue
    //....
});
评论(1)