Jquery Ajax发布到MVC控制器不起作用(返回null)

时间:2018-03-19 12:32:59

标签: jquery ajax asp.net-mvc

我的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);
}

1 个答案:

答案 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})无效的原因是您的模型不包含名为UserPass的属性。