在我的 ASP.NET 5 MVC 6 应用程序中,我想使用 Ajax 将一些数据发布到我的 Controller 。我已经用 ASP.NET MVC 5 做到了这一点,我在一个空白的 ASP.NET MVC 5 项目中测试了完全相同的代码并且它有效,但是对于新版本我不能,我也不知道为什么。 通过 Ajax 调用,我可以转到 Controller ,创建了模型,但字段为空(或 bool 值为 false)。这是我的代码:
脚本.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.
}
});
账户 Controller .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");
}
登录 View 模型.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
形式的内容,那么您做错了,那是表单格式。
您不需要 model
变量。如果您看到带有“包装器”的请求,则应将其删除。
关于c# - ASP.NET 5/MVC 6 Ajax 将模型发布到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782928/