在我的ASP.NET 5 MVC 6应用程序中,我想用Ajax发布一些数据到我的控制器。我已经使用ASP.NET MVC 5做到了这一点,并且在空白的ASP.NET MVC 5项目中测试了完全相同的代码,并且可以正常工作,但是对于新版本,我做不到,我也不知道为什么。通过Ajax调用,我可以转到控制器,创建模型,但是字段为null(对于布尔值,则为false)。这是我的代码:
script.js:
var data = { model: { UserName: 'Test', Password: 'Test', RememberMe: true } }; $.ajax({ type: "POST", url: "/Account/Login/", data: JSON.stringify(data), contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { // Do something interesting here. } });
AccountController.cs:
[HttpPost] public JsonResult Login(LoginViewModel model) { if (ModelState.IsValid) { //var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); //if (result.Succeeded) //{ // //return RedirectToLocal(returnUrl); //} ModelState.AddModelError("", "Identifiant ou mot de passe invalide"); return Json("error-model-wrong"); } // If we got this far, something failed, redisplay form return Json("error-mode-not-valid"); }
LoginViewModel.cs:
public class LoginViewModel { [Required] [Display(Name = "UserName")] [EmailAddress] public string UserName { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [Display(Name = "Remember me?")] public bool RememberMe { get; set; } }
有任何想法吗 ?谢谢
如果您使用的是json,则需要在MVC6上显式使用FromBody
public JsonResult Login([FromBody]LoginViewModel model)
编辑
我认为您正在混合不同的错误。我将尝试描述您应该如何提出请求:
内容类型 必须为 :application / json
您的请求正文 必须为 JSON格式(如JasonLind建议):
{ UserName: 'Test', Password: 'Test', RememberMe: true };
这是检查请求(通过chrome调试器工具F12)或使用请求检查器(如fiddler)时应看到的内容。
如果看到形式为的某物,UserName=Test&Password=Test&RememberMe=true则说明您做错了,那就是形式格式。
UserName=Test&Password=Test&RememberMe=true
您不需要该model变量。如果看到带有“包装器”的请求,则应将其删除。
model