danila_net
@danila_net
Изучаю CLR, C#, ASP.NET

Как передать список объектов из cshtml в контроллер через javascript?

На форме есть таблица с input, которые будут заполняться. После того как прошла проверка на заполнение всех полей, данные должны передаться в контроллер. Это сделать у меня не получается. Передавать просто переменные я могу, а список нет.
Я делаю этот так:
function DogovorSaveOk() {
        var tabletab = document.getElementById('tabb');
        var isValid = true;
        for (var i = 1; i <= tabletab.rows.length; i++) {
            if (($('#Massa_' + Number(i)).val() == "")) {
                $('#Massa_' + Number(i)).css('border-color', 'Red');
                isValid = false;
            }
            else {
                $('#Massa_' + Number(i)).css('border-color', 'lightgrey');
            }
          
        }
      
        if (isValid == false) {
            return false;
        }
        
        var tab =
        {
            'Massa' : $('#Massa').val(),
            'PrimDog' : $('#Massa').val()
        }
        var arr = [];
        for (let i = 1; i <= tabletab.rows.length; i++)
        {
            arr.push(i);
            console.log(i);
        }
        console.log(arr);
        var data = {
            'TabDog': arr,
            'NumberDog': $('#NumberDog').val(),
            'DateDogM': $('#DateDogM').val(),
            'S': $('#S').val(),
            'Po': $('#Po').val(),
            'OrganizDog': $('#OrganizDog').val(),
            'PrimDog': $('#PrimDog').val(),
            'UserDog': $('#UserDog').val(),
            'DateDog': $('#DateDog').val(),
            'TabDog': $('#DateDog').val()
        };
        $.ajax({
            url: "/Home/DogovorSaveOk",
            type: "POST",
            contentType: "application/json;charset=UTF-8",
            data: JSON.stringify(data),
            dataType: "html",
            success: function (result) {
                $('#tabdog').html(result);
            },
            error: function (errormessage) {
                alert(errormessage.responseText);
            }
        });

    }


Это контроллер
[HttpPost]
        public ActionResult DogovorSaveOk(decimal[] TabDog)
        {
            
            return PartialView();
        }
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
yarosroman
@yarosroman Куратор тега C#
C# the best
Комментировать
@oleg_ods
В запросе Вы посылаете объект подобной структуры:
var data = {
            'TabDog': arr,
            'NumberDog': $('#NumberDog').val(),
            'DateDogM': $('#DateDogM').val(),
            'S': $('#S').val(),
            'Po': $('#Po').val(),
            'OrganizDog': $('#OrganizDog').val(),
            'PrimDog': $('#PrimDog').val(),
            'UserDog': $('#UserDog').val(),
            'DateDog': $('#DateDog').val(),
            'TabDog': $('#DateDog').val()
        };


А в контроллере пытаетесь получить массив чисел типа decimal. Вот сервер и не может корректно забиндить полученные данные.

Варианты решения:
1) Принимать в контроллере объект.
2) Посылать в ajax запросе только массив чисел.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы