Получение объекта из ajax - ASP.NET Core 2 - PullRequest
0 голосов
/ 29 октября 2018

Я пишу этот пост, потому что не могу найти учебник, который объяснил бы мне некоторые неточности, которые коснулись меня при работе с ajax в ASP.NET Core 2.

Это мой код, который работает:

Ajax:

$("#saveImg").click(function () {
        var imageHelper = {
            filesData: new FormData(),
            imagesData: []
        };
        $('div[class*="img-"]').each(function (index, element) {
            var eachImgData = {
                name: null,
                height: null,
                width: null,
                extension: null,
                displayName: null,
                alt: null,
                caption: null
            };

            eachImgData.name = $(this).find('span[name="name"]').text();
            eachImgData.height = $(this).find('span[name="height"]').text();
            eachImgData.width = $(this).find('span[name="width"]').text();
            eachImgData.extension = $(this).find('span[name="extension"]').text();
            eachImgData.displayName = $(this).find('input[id="displayName"]').val();
            eachImgData.alt = $(this).find('input[id="alt"]').val();
            eachImgData.caption = $(this).find('input[id="caption"]').val();

            imageHelper.imagesData.push(eachImgData);
        });

        var input = document.getElementById('files');
        var files = input.files;

        for (var i = 0; i != files.length; i++) {
            imageHelper.filesData.append("files", files[i]);
        }

        $.ajax(
            {
                url: '@Url.Action("Upload", "Image")',
                data: JSON.stringify(imageHelper),
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val());
                },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                type: "POST",
                success: function (o) {
                    if (o.success) {
                        $('#imgInfo').text('its OK :)');
                    };
                },
                errors: function () {
                    aletr('Please contact with administrator - upload img in admin')
                }
            }
        );
    });

и ImageController:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Upload([FromBody] JObject imageHelper)
    {
        //Do something
        return new JsonResult();
    }

Неточности, которые я обнаружил в различных уроках: вызов действий, таких как: OnGet, OnPost, OnGetAsync, OnPostAsync и т. Д. + Имя, например, OnGetList, OnPostList с обработчиком свойств json, например, имя действия

в моем случае:

var imageHelper = {
    filesData: new FormData(),
    imagesData: [],
    handler: "Upload"
};
public IActionResult OnPostUpload([FromBody] JObject imageHelper)

В моем случае этот подход не работает - и я не могу найти никакого решения, почему и каков рекомендуемый подход

Второе, что не работает для меня, это получение сильного типа obj - я просто получаю JObject.

Ниже эквивалент объекта javascript:

public class ImageHelper
{
    IList<IFormFile> filesData { get; set; }
    public ImagesInfo imagesData { get; set; }
}

public class ImagesInfo
{
    public string name { get; set; }
    public int height { get; set; }
    public int width { get; set; }
    public string extension { get; set; }
    public string displayName { get; set; }
    public string alt { get; set; }
    public string caption { get; set; }
}

и получение этого строго типа в контроллере не работает

public IActionResult Upload([FromBody] ImagesInfo imageHelper)

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

EDIT: На мой взгляд, другая модель не имеет ничего общего с изображениями. Как правило, я хотел сохранить изображение с помощью ajax, вернуть идентификаторы сохраненных изображений и перейти к модели продукта (которая является моделью представления)

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