I'he estado buscando en la pregunta aquí: https://stackoverflow.com/questions/4120212/mvc-ajax-json-post-to-controller-action-method pero por desgracia doesn't parecen estar ayudando a mí. La mía es más o menos exactamente lo mismo, excepto mi firma método (pero I'he intentado que y todavía no se golpeó).
$('#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
}
});
});
[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));
}
Sin embargo, no importa lo que intente, mi Controller
nunca es golpeado. A través de la depuración, sé que envía una solicitud, sólo recibe un error Not Found
cada vez.
Su Acción está esperando parámetros de cadena, pero usted está enviando un objeto compuesto.
Necesita crear un objeto que coincida con lo que está enviando.
public class Data
{
public string username { get;set; }
public string password { get;set; }
}
public JsonResult Login(Data data)
{
}
EDIT
Además, toStringify() probablemente no es lo que quieres aquí. Sólo tiene que enviar el objeto en sí.
data: data,
Se debe a que envía un objeto y espera dos parámetros.
Pruebe esto y verá:
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
}