ASP. NET Core Передача данных модели формы в ajax частичная загрузка представления заменяет десятичные числа на целые - PullRequest
0 голосов
/ 01 мая 2020

Я редактирую мастер / форму детали в модальном окне. Для удобства пользователей я передаю данные формы / представления модели в контроллер через ajax.

Когда пользователь добавляет дочернюю запись, я передаю данные формы в контроллер + данные, введенные пользователем (для ребенка).

function addChildRecord(e, control, id = 0) {
    e.preventDefault();
    var form = $(control).closest('form');
    var url = 'Home/AddChild/?id=' + id;

    $.ajax({
        type: 'post',
        url: url,
        data: form.serialize(),
        success: function () {
            //alert('form was submitted');
        }
    }).done(function (result) {
        if (result.status === 'success') {
            //update child table - ajax partial reload

            var data = {
                model: result.model
            }

            $('.section-list-child').load('/Home/RefreshChildRecords', data, function () {
            });
        } else {
            // show error ...
        }
    });
}

Затем я добавляю данные о ребенке в соответствующий список в родительском. И верните обновленные данные модели в представление (обратите внимание, что на данный момент уже существуют некоторые дочерние записи; значения2 и значение3 являются десятичными). Если я отлаживаю метод AddChild, все значения там и в правильном формате.

Предыдущие дочерние записи в ListChildren имеют десятичное значение для значений2 и значений3. Кроме того, передаются новые дочерние значения в порядке (TempChildValue1, 2, 3).

[HttpPost]
public IActionResult AddChild(MyViewModel model, int id)
{
    var childValue1 = model.TempChildValue1; //string
    var childValue2 = model.TempChildValue2; //decimal
    var childValue3 = model.TempChildValue3; //decimal
    var validate = ValidateChild(childValue1, childValue2, childValue3);

    if (string.IsNullOrEmpty(validate ))
    {
        var item = new ChildRecord {
            Value1 = childValue1,
            Value2 = childValue2,
            Value3 = childValue3
            };
        model.ListChildren.Add(item);
    }

        return Json(new { status = "success", model = model });
    }
    else
    {
        return Json(new { status = "error", message = validate });
    }
}

Теперь при отладке в браузере я проверяю данные, полученные в моем ajax (как указано выше) ) функция сохранения данных модели в var data.

Все данные в порядке, включая данные в ListChildren (в value2 и value3 есть десятичные числа), но когда я передаю эту переменную data обратно в контроллер для частичной перезагрузки дочерней таблицы (таблица в div с классом section-list-child десятичные дроби преобразуются в (неправильные) целые числа, когда я проверяю значения в функции принимающего контроллера:

[HttpPost]
public IActionResult RefreshChildRecords(MyViewModel model)
{
    return PartialView("_PartialDetail", model);
}

Почему?

Если мой вопрос не ясен, пожалуйста, дайте мне знать, и я постараюсь улучшить формулировку (я не являюсь носителем английского языка sh).

Примечания:

  • мой язык (windows, браузер) использует десятичную запятую в качестве разделителя (т. Е. Одна тысяча равна 1.000,00)

  • Я уже пробовал var data = {model: JSON.stringify(result.model)}, но потом модель, которую я получаю в RefreshChildRecords(MyViewModel model), пуста.

...