Я редактирую мастер / форму детали в модальном окне. Для удобства пользователей я передаю данные формы / представления модели в контроллер через 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)
, пуста.