сложный обьект после отправки ajax post имеет поле null

хочу сделать сортировку объектов на странице с помощью ajax.

ОТВЕТ: в комментариях к вопросу Alexander Petrov дал ответ.

При попытке отправить объект:

    public class SortBmViewModel
    {
        public Folder Folder { get; set; }     //class
        public SortType SortType { get; set; } //enum
    }

обьект Folder:

    public class Folder
    {
        public long Id { get; set; }

        public string Name { get; set; }

        public long UserId { get; set; }

        public List<BookMark> BookMarks { get; set; }
    }

введите сюда описание изображения введите сюда описание изображения

поле Folder получает значение null, но во время передачи оно точно не является таковым.

введите сюда описание изображения

код представления:

@model SortBmViewModel

<div>
    <form id="SortForm" onsubmit="return false;">
        <input asp-for="Folder" hidden="hidden" />
        <div>
            <div>
                <input asp-for="SortType" value="@SortType.SortByDataCreate" hidden="hidden" />
                <button onclick="SortBy()">Data Create</button>
            </div>
            <div>
                <input asp-for="SortType" value="@SortType.SortByName" hidden="hidden" />
                <button onclick="SortBy()">Name</button>
            </div>
            <div>
                <input asp-for="SortType" value="@SortType.SortByUrl" hidden="hidden" />
                <button onclick="SortBy()">Url(https://www.some.com)</button>
            </div>
        </div>
    </form>
</div>

<script>
    function SortBy() {
        var data = $('#SortForm').serialize();
        $.ajax({
            type: 'POST',
            url: '@Url.Action("SortBookmarks", "Profile")',
            data: JSON.parse(JSON.stringify(data)),
            success: function (response){
                $("#content").html(response);
            },
            error: function (response) {
                alert(response.responseText);
            }
        });
    }
</script>

данное представление является частичным в него передаётся объект:

    <div class="vertical-menu">
        @await Html.PartialAsync("_MenuSortPartial", new SortBmViewModel() { Folder = Model })
    </div>

код метода действия:

        [HttpPost]
        public IActionResult SortBookmarks(SortBmViewModel sortmodel)
        {
            switch (sortmodel.SortType)
            {
                case SortType.SortByDataCreate:
                    sortmodel.Folder.BookMarks.OrderBy(b => b.DateСreation);
                    break;
                case SortType.SortByName:
                    sortmodel.Folder.BookMarks.OrderBy(b => b.Name);
                    break;
                case SortType.SortByUrl:
                    sortmodel.Folder.BookMarks.OrderBy(b => b.Url);
                    break;
            }
            return RedirectToAction("_ShowFolderPatrial", sortmodel.Folder);
        }

P.s. Скорей всего я просто не понимаю как правильно сериализировать сложный объект(ибо когда пробовал отправлять простые типы данной проблемы не было), но как правильно это сделать не знаю.


Ответы (0 шт):