Я'смотрел вопрос здесь: https://stackoverflow.com/questions/4120212/mvc-ajax-json-post-to-controller-action-method, но, к сожалению, мне это не помогает. У меня практически то же самое, за исключением подписи метода (но я пробовал и это, и он все равно не попадает).
$('#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));
}
Однако, что бы я ни пытался сделать, мой Controller
никогда не получает запрос. Отлаживая, я знаю, что он отправляет запрос, просто каждый раз получает ошибку Not Found
.
Ваш Action ожидает строковые параметры, но вы отправляете составной объект.
Вам нужно создать объект, соответствующий тому, что вы отправляете.
public class Data
{
public string username { get;set; }
public string password { get;set; }
}
public JsonResult Login(Data data)
{
}
EDIT
Кроме того, toStringify(), вероятно, не то, что вам нужно. Просто отправьте сам объект.
data: data,
Это связано с тем, что вы посылаете один объект, а ожидаете два параметра.
Попробуйте это и вы увидите:
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
}