2014-12-02 8 views
3

Я пытаюсь отправить свой идентификатор пользователя и пароль в мой метод действия контроллера входа в систему.Как отправить объект json методу действия контроллера в MVC 4

//Login button click code 

$("#btnLogin").click(function() { 
    var userCrdential = { 
     UserName: $("inputEmail3").val(), 
     Password: $("inputPassword3").val() 
    }; 
    $.ajax({ 
     type: "POST", 
     url: "/Home/Login", 
     content: "application/json; charset=utf-8", 
     dataType: "json", 
     data: userCrdential, 
     success: function (res) { 
      // alert("data is posted successfully"); 
      if (res.success == true) 
       alert("data is posted successfully"); 
      else { 
       // alert("Something went wrong. Please retry!"); 
      } 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
      alert(xhr.statusMessage); 
     } 
    }); 
}); 

и в моем родном контроллере я войти в метод Действие

[HttpPost] 
    [ActionName("Login")] 
    public ActionResult Login(User userCrdential) 
    { 
     string userIdtest = userCrdential.UserName; 
     string userPasswordtest = userCrdential.Password; 
     var result=false; 

     if (userIdtest != null && userPasswordtest != null) 
     { 
      result = true; 
     } 
     else 
     { 
      result = false; 
     } 

     return Json(result); 
     //return RedirectToAction("Index"); 
    } 

но мой метод действия не вызывая ...

+0

В firebug отображается сообщение в порядке, но отображается ошибка follwing "NetworkError: 404 Not Found - http: // localhost: 49996/BlueBusApp/@Url.Action (% 22Login% 22,% 20% 22Home% 22) «... У меня есть этот вызов ajax из файла Common.js, который находится внутри папки« Содержимое », а мой метод действия« Метод »находится внутри моего домашнего контроллера ... – Debashrita

ответ

3

Вам нужно изменить content к contentType и вызвать JSON.stringify на вашем данные:

$.ajax({ 
    type: "POST", 
    url: "/Home/Login", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: JSON.stringify(userCrdential), 
    ... 
}); 

См. jQuery.ajax

0

В MVC никогда не должно быть жесткого кода URL.

Вместо этого используйте @Url.Action.

url: ('@Url.Action("Login", "Home")', 

userCrdential должен быть закодирован в формате JSON:

JSON.stringify(userCrdential) 

Кроме того, для того же вашего здравомыслия, пожалуйста, используйте метод fail.

$.ajax("url") 
    .done(function() { 
    alert("success"); 
}) 
    .fail(function() { 
    alert("error"); 
}) 

последнее замечание, success нежелателен из jQuery 1.8; вместо этого вы должны использовать done.

+0

Почему URL-адреса никогда не должны быть жестко закодированы? – CompanyDroneFromSector7G

+0

Потому что, если вы измените настройки своего маршрутизатора, жестко закодированное значение станет недействительным, и вам нужно будет обновить два места вместо одного. –

+0

Спасибо очень полезно :) – CompanyDroneFromSector7G

0

Просто измените его от:

var userCrdential = { 
    UserName: $("inputEmail3").val(), 
    Password: $("inputPassword3").val() 
}; 

к:

var userCrdential = "UserName=" + $("inputEmail3").val() + "&Password=" + $("inputPassword3").val(); 

все другие вещи нормально в вашем коде, но убедитесь, что параметр ваш контроллер имеет те же параметры, проходящие здесь есть имя пользователя и пароль ,

однако вам необходимо проверить ввод пользователя перед вызовом ajax.

+0

Привет, я получаю следующую ошибку в firebug NetworkError: 404 Not Found - http: // localhost: 49996/Главная/Вход «У меня есть мой вызов ajax в моем файле Common.js и мой контроллер входа Действие находится внутри моего HomeController ... – Debashrita

+0

Просто измените действие контроллера из общедоступного входа в ActionResult (User userCrdential) в общедоступный JsonResult Login (User userCrdential). – raju1208

Смежные вопросы