将Javascript对象数组传递给MVC控制器

将Javascript对象数组传递给MVC控制器,javascript,c#,jquery,asp.net,Javascript,C#,Jquery,Asp.net,我有这些视图模型: public class UserAddRoleListViewModel { public String Id { get; set; } public String Name { get; set; } } public class SaveUserNewRoleViewModel { [Required] public String RoleId { get; set; } public String RoleName { ge

我有这些视图模型:

public class UserAddRoleListViewModel
{
    public String Id { get; set; }
    public String Name { get; set; }
}

public class SaveUserNewRoleViewModel
{
    [Required]
    public String RoleId { get; set; }
    public String RoleName { get; set; }
    public List<UserAddRoleListViewModel> RoleList { get; set; }
}
dataSet.push
(对象)

到我的MVC控制器:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult VerifyRole(SaveUserNewRoleViewModel Input)
    {
        IEnumerable<object> errors = null;
        if (ModelState.IsValid)
        {
            if(Input.RoleList[0] != null)
            {
                foreach (var item in Input.RoleList)
                {
                    if (Input.RoleId == item.Id)
                    {
                        ModelState.AddModelError("RoleId", "Role already exists");
                        errors = AjaxError.Render(this);
                        return Json(new { success = false, errors });
                    }
                }
                return Json(new { success = true });
            }
            return Json(new { success = true });
        }
        else
        {
            errors = AjaxError.Render(this);
            return Json(new { success = false, errors });
        }
    }

Javascript

$("#myBtn").click(function () {

                var dataSet= [];
                var obj = {
                              Id: rowIdItem,
                              Name: rowItem
                         };
                dataSet.push(obj);

                var data = {
                "RoleId": '1',
                "RoleName ": 'roleName',
                "RoleList": dataSet
                };

                $.ajax({
                    type: "POST",
                    traditional:true,
                    url: "controller/VerifyRole",
                    content: "application/json;",
                    dataType: "json",
                    data: data ,
                    success: function () {
                    }
                });
            });
控制器/动作

[HttpPost]
public ActionResult VerifyRole(SaveUserNewRoleViewModel input)
{
    ...
}
试试这个:)


您想将
dataSet
传递到
VerifyRole
方法吗?@Hossein是的,这就是我想要的如果您需要检查角色是否存在,必须从db获取角色列表并执行操作,因为可能有人在此期间插入/更新数据。角色列表已经来自db。我只想检查我的新对象是否已经存在于正在填充
数据集的数据集中,但我已经在这样做了。我需要知道我的viewmodel是否正确?我添加了ajax代码。我不确定我的viewmodel是否正确,因为当我的ajax发送数据时,第二次添加项目时列表是空的,即使项目已经存在,我也需要传递antiforgerytoken和dataset。
$(document).on($.modal.AFTER_CLOSE, function (event, modal) {
    dataSet.push(object);
    table.row.add(object).draw();
    $("#modal").empty();
});
$("#myBtn").click(function () {

                var dataSet= [];
                var obj = {
                              Id: rowIdItem,
                              Name: rowItem
                         };
                dataSet.push(obj);

                var data = {
                "RoleId": '1',
                "RoleName ": 'roleName',
                "RoleList": dataSet
                };

                $.ajax({
                    type: "POST",
                    traditional:true,
                    url: "controller/VerifyRole",
                    content: "application/json;",
                    dataType: "json",
                    data: data ,
                    success: function () {
                    }
                });
            });
[HttpPost]
public ActionResult VerifyRole(SaveUserNewRoleViewModel input)
{
    ...
}
$(document).on("submit", "#modal", function (e) {
    e.preventDefault();
    var selectedText = $("#@Html.IdFor(m=>m.RoleId) :selected").text();
    var selectedId = $("#@Html.IdFor(m=>m.RoleId)").val();
    var form_data = {};
    form_data.RoleId = selectedId;
    form_data.RoleName =selectedText;
    console.log(form_data);
    rowIdItem = selectedId;
    rowItem = selectedText;
    $("#close").trigger("click");
    $.ajax({
        url: "@Url.Action("VerifyRole", @ViewContext.RouteData.Values["controller"].ToString())",
        method: "POST",
        data: JSON.stringify(form_data),
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        success: function (result) {
            if (result.success) {
                rowIdItem = selectedId;
                rowItem = selectedText;
                $("#close").trigger("click");
                return;
            }
            $.each(result.errors, function (index, item) {
                // Get message placeholder
                var element = $('[data-valmsg-for="' + item.propertyName + '"]');
                element.empty();
                // Update message
                element.append($('<span></span>').text(item.errorMessage));
                // Update class names
                element.removeClass('field-validation-valid').addClass('field-validation-error');
                $('#' + item.propertyName).removeClass('valid').addClass('input-validation-error');
            });
        }
    });
    return false;
});
  $("body").on("click", "#btnSave", function () {
    var ops = new Array();
    $("#table TBODY TR").each(function () {
        var row = $(this);
        var ps = {};
        ps.colname1 = row.find("TD").eq(0).html();
        ps.colname2 = row.find("TD").eq(1).html();
        ps.colname3=  row.find("TD").eq(2).html();
        ops.push(ps);
    });
    var item = {};
    item.nam1 = "test";
    item.List = ops;
     $.ajax({
        type: "POST",
        url: " ...",
        data: JSON.stringify(item),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (r) {

        }
    });
});