MVC ajax memposting ke metode aksi pengontrol

Saya telah melihat pertanyaannya di sini: https://stackoverflow.com/questions/4120212/mvc-ajax-json-post-to-controller-action-method tapi sayangnya sepertinya tidak membantu saya. Milik saya hampir sama persis, kecuali tanda tangan metode saya (tapi saya sudah mencobanya dan tetap tidak kena).

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));
}

Namun, tidak peduli apa yang saya coba, Controller saya tidak pernah terkena. Melalui debugging, saya tahu bahwa ia mengirimkan permintaan, hanya saja ia mendapat kesalahan Tidak Ditemukan setiap kali.

Larutan

Action Anda mengharapkan parameter string, tetapi Anda mengirim objek komposit.

Anda perlu membuat objek yang cocok dengan apa yang Anda kirimkan.

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

public JsonResult Login(Data data)
{
}

EDIT

Selain itu, toStringify() mungkin bukan yang Anda inginkan di sini. Kirim saja objek itu sendiri.

data: data,
Komentar (0)

Ini karena Anda mengirim satu objek, dan Anda mengharapkan dua parameter.

Coba ini dan Anda akan tahu:

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
}
Komentar (2)
$('#loginBtn').click(function(e) {
    e.preventDefault(); /// it should not have this code or else it wont continue
    //....
});
Komentar (1)