我的ajax帖子到控制器不起作用。下面的代码是我尝试做的基本示例。
在调试模式下,它返回null,返回到ajax调用的值为空,即使我添加了属性
public IActionResult Login([FromBody]Data data)
它仍然不起作用
这是我的ajax all
$('#SignIn').click(function () {
$('#SignIn').val('Please Wait');
Ajax_Login();
});
function Ajax_Login() {
var data = {
username: $('#Email').val().trim(),
password: $('#Password').val()
};
$.ajax({
type: "POST",
url: "/Upload/Login",
data: data,
contentType: "application/json",
dataType: "json",
success: function (message) {
alert(message);
},
error: function (message) {
alert(message);
}
我也尝试过使用data: JSON.stringfy({ User: Username, Pass: Password })
这是我的控制器
public class Data
{
public string Username { get; set; }
public string Password { get; set; }
}
控制器方法
[HttpPost]
public IActionResult Login(Data data)
{
var message = data.Username + " and " + data.Password;
return Json(message);
}
答案 0 :(得分:0)
您在请求中发送了一个对象,因此您需要删除ajax函数中的contentType: "application/json",
选项,以便它使用默认的'application/x-www-form-urlencoded; charset=UTF-8'
。
或者(如果您使用'application/json'
),则需要使用data: JSON.stringify(data),
对对象进行字符串化。但是,在mvc中,如果通过强烈绑定模型正确生成视图,则很少需要使用这些选项,例如使用<input asp-for="Username" />
或@Html.TextBoxFor(m => m.Username)
。正确生成视图后,您只需使用var data = $(yourForm).serialize();
即可正确序列化所有表单控件。
请注意,JSON.stringfy({User: Username, Pass: Password})
无效的原因是您的模型不包含名为User
和Pass
的属性。