Передайте массив объектов json в MVC 5 Action через JQuery AJAX, и у параметра Action есть записи, но нет данных - PullRequest
0 голосов
/ 09 ноября 2018

Я пробовал решения по аналогичным вопросам, но не добился успеха.Я передаю объект jQuery из строк массива в действие контроллера MVC5.Если я укажу параметр действия в виде строки, он получит значение, но параметр будет нулевым.Если я указываю параметр в виде списка, а структура массива jquery совпадает со структурой списка, я получаю ошибку сервера 500.Я пробовал тип данных, тип контента и т. Д., Как и в других сообщениях на SO, но безуспешно.

Может кто-нибудь, пожалуйста, помогите.

Структура списка:

public class  ActionPermission2
{
    public int ID = 0;
    public int FKMenuID = 0;
    public string ActionName = "";
    public string Allowed = "";
    public int PermissionType = 0;
    public int PermissionTypeID = 0;
}

Попытка метода действия (одна в виде списка actionPermissions, а другая в виде строкового массива:

    public ActionResult UpdateModel2(List<ActionPermission2> menuPermissionsModel)
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    public ActionResult UpdateModelSA(string[] menuPermissionsModel)
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }

JS и jQuery:

            $('input[type=checkbox]').each(function ()
             {
                var datarow = {
                    "ID": pId,
                    "FKMenuID": mId,
                    "ActionName": actionName,
                    "Allowed": checked,
                    "PermissionType": "",
                    "PermissionTypeID": ptId
                };

                jsonObj.push(datarow);
            }
        });
        $.ajax({
            type: "POST",

            //url: "@Url.Action("Update")",           //string[] menuPermissionsModel
            url: "@Url.Action("UpdateModel2")",     //List<ActionPermission2> menuPermissionsModel
            //url: "@Url.Action("UpdateModelSA2")",     //List<string> menuPermissionsModel

            data: JSON.stringify({ 'menuPermissionsModel': jArray }),

            traditional: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data)
            {
                alert('data: ' + data);
            },
            error: function (data)
            {
                alert("error");
                console.log(data);
            }
        });

при направлении вызова ajax в списокparam, .. есть все записи, но все они показывают значения по умолчанию в соответствии с классом, в котором он построен, т.е. т.е. без данных.

Edit2: Data ex console.log.

[{"ID":"0","FKMenuID":"38","ActionName":"Read","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"38","ActionName":"Create","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"38","ActionName":"Update","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"38","ActionName":"Delete","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"65","ActionName":"Read","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"65","ActionName":"Create","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"50","ActionName":"Delete","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"67","ActionName":"Read","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"67","ActionName":"Create","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"67","ActionName":"Update","Allowed":false,"PermissionType":"","PermissionTypeID":"0"},
{"ID":"0","FKMenuID":"67","ActionName":"Delete","Allowed":false,"PermissionType":"","PermissionTypeID":"0"}]

enter image description here

1 Ответ

0 голосов
/ 13 ноября 2018

Ответ на мой вопрос:

Я изменил свой базовый класс с того, что было опубликовано на следующее:

    public class  ActionPermission2
{
    public int ID { get; set; }
    public int FKMenuID { get; set; }
    public string ActionName { get; set; }
    public string Allowed { get; set; }
    public string PermissionType { get; set; }
    public int PermissionTypeID { get; set; }

    public ActionPermission2()
    {
        this.ID = 0;  
        this.FKMenuID = 0;
        this.ActionName = "";
        this.Allowed = "false";
        this.PermissionType = "";
        this.PermissionTypeID = 0;
    }
}

Теперь я получаю записи, как и раньше, в параметре метода действия, .. только теперь они показывают значения, заполненные в массиве объектов js.

Я также изменил тип данных «Разрешено» с bool на string, так как это вызвало ответную ошибку 500.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...