使用jquery和ajax将json对象发布到mvc控制器

Zap*_*ica 24 javascript ajax asp.net-mvc jquery html5

我试图从表单中提交一些值到我的mvc控制器.

这是我的控制器:

 //Post/ Roles/AddUser
    [HttpPost]       
    public ActionResult AddUser(String json)
    {
        Log.submit(json);            
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

这是js:

<script>
function submitForm() {

    var usersRoles = new Array;
    $("#dualSelectRoles2 option").each(function () {
        usersRoles.push($(this).val());
    });
    console.log(usersRoles);

    jQuery.ajax({
        type: 'POST',
        url: "@Url.Action("AddUser")",
        contentType: "application/json; charset=utf-8",
        datatype: 'json',
        data: JSON.stringify(usersRoles),
        success: function (data) { alert(data); },
        failure: function (errMsg) {
            alert(errMsg);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

当我在控制器上调试时,我的参数为null?该console.log(usersRoles)给我的数据.

我做错了什么?

如何在控制器中接收json对象?

ram*_*ilu 29

我在你的代码中看到你试图将ARRAY传递给POST动作.在这种情况下,按照以下工作代码 -

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
    function submitForm() {
        var roles = ["role1", "role2", "role3"];

        jQuery.ajax({
            type: "POST",
            url: "@Url.Action("AddUser")",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(roles),
            success: function (data) { alert(data); },
            failure: function (errMsg) {
                alert(errMsg);
            }
        });
    }
</script>

<input type="button" value="Click" onclick="submitForm()"/>
Run Code Online (Sandbox Code Playgroud)

控制器动作将是 -

    public ActionResult AddUser(List<String> Roles)
    {
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

然后当你点击按钮 -

在此输入图像描述


Shi*_*med 11

而不是接收json字符串,模型绑定更好.例如:

[HttpPost]       
public ActionResult AddUser(UserAddModel model)
{
    if (ModelState.IsValid) {
        return Json(new { Response = "Success" });
    }
    return Json(new { Response = "Error" });
}

<script>
function submitForm() {    
    $.ajax({
        type: 'POST',
        url: "@Url.Action("AddUser")",
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        data: $("form[name=UserAddForm]").serialize(),
        success: function (data) {
            console.log(data);
        }
    });
}
</script>
Run Code Online (Sandbox Code Playgroud)