Передача двух или более изображений в данных JSON в MVC Controller не работает - PullRequest
0 голосов
/ 29 мая 2018

У меня есть веб-приложение asp.net mvc, которое имеет форму с некоторыми текстовыми данными (заголовок, описание, например) и некоторыми изображениями.Из-за изменения размеров изображений перед их отправкой на сервер у меня есть функция javascript для изменения размера изображений, помещения всех данных в объект и отправки их в виде JSON с вызовом ajax на сервер.

ЭтоМодель:

public class ItemCU
{
    public int pid { get; set; }
    public string pcat { get; set; }
    public string ptitle { get; set; }
    public string pdescription { get; set; }
    public double pprice { get; set; }
    public int pcount { get; set; }
    public int psort { get; set; }
    public string[] pimgOrder { get; set; }
    public string[] pimgNum { get; set; }
    public string[] pimgData { get; set; }
    public List<SelectListItem> pcategories { get; set; }
}

Это функция javascript:

    function saveData() {

        var imgNum = [], imgData = [];
        for (var i = 0; i < newOrder.length; i++) {
            if (newOrder[i] > 999999) {
                imgNum.push(newOrder[i]);
                var resimg = resizeImage($("img[data-id='" + newOrder[i] + "'").attr('src'));
                imgData.push(resimg);
            }
        }

        var itmData = {
            pid: $("#id").val(),
            ptitle: $("#title").val(),
            pcat: $("#cat").val(),
            pdescription: $("#description").val(),
            pcount: $("#count").val(),
            pprice: $("#price").val(),
            psort: $("#sort").val(),
            pimgOrder: newOrder,
            pimgNum : imgNum,
            pimgData : imgData
        }

        $.ajax(
            {
                url: '@Url.Action("ItemEdit", "Admin")',
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({ piData: itmData }),
                success: function (delres) {
                    window.location.href = delres.redirectUrl;
                },
                error: function (delres) {
                    window.location.href = delres.redirectUrl;
                    }
                }
            }
        )
    }

Я сократил вызов ajax вокруг части обратного вызова.

Все работает нормально, когда я просто выбираюи отправить одно изображение, но когда я хочу отправить несколько изображений, это не работает.Похоже, что данные не отправляются с помощью ajax, но будут продолжаться напрямую с ошибкой обратного вызова ..

Я сделал снимок экрана моего сеанса отладки браузера, где вы можете видеть, что массив (pimgdata) содержит два изображениятак что до сих пор все в порядке.

Screenshot of debugging JS

Всякий раз, когда я пытаюсь Google, я нахожу примеры с простой отправкой изображений без других данных или данных и одногоimage ...

Мой вопрос теперь заключается в том, сделал ли я что-то не так с вызовом (может быть, thiatring) или он все равно не работает так, как я хочу?

Iбыл бы очень благодарен, чтобы получить некоторые советы / подсказки / советы.Даже некоторые ключевые слова, которые я мог бы найти в Google, были бы полезны.

Заранее спасибо, Тим (надеюсь, что в вопросе есть вся необходимая информация ...)

ОБНОВЛЕНИЕ:

ПослеПо совету Робби Корнелиссена я обнаружил, что с maxJsonLength возникает «простая» проблема.К сожалению, когда я захожу в Google, я обычно нахожу ответы для отправки данных с сервера на клиент, а не наоборот.Как я уже читал, редактировать webconfig необязательно, так как он предназначен только для веб-сервисов, а не для контроллера MVC.

Я прочитал, что могу перейти на JSON.serialize, но думаю, что проблема будет та же.

Честно говоря, я не понимаю, является ли это проблемой отправки данных на сервер и / или получения данных на стороне сервера ...

Есть какие-нибудь подсказки, которые я могу использовать в Google?Большое спасибо, Тим

ОБНОВЛЕНИЕ 2 / 'РЕШЕНИЕ'

После долгого поиска я нашел две страницы, которые помогли мне найти 'решение', которое наконец заработало,Не знаю, может быть, есть лучший способ, но ...

Первая часть, которую я нашел на ExpertsExchange : они создали пользовательский JsonValueProviderFactory и заменили значение по умолчанию на это в Global.asax

Кроме того, я добавил maxRequestLength и maxAllowedContentLength в свой web.config, как я нашел здесь в StackOverflow

Могли бы быть и лучшие решения, но для меня это сработало.

Большое спасибо, Тим

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