Итак, у меня есть jqGrid на веб-сайте ASP.NET MVC 3. Он загружает данные, ищет, фильтрует и сохраняет строки с помощью встроенного всплывающего редактора. То, что я не могу получить на работу, это сохранение обнуляемого свойства. Я использую LargeJsonResult вместо встроенного JsonResult, поэтому пример строки в сетке такой:
// C# class
public class Row
{
public string A { get; set; }
public string B { get; set; }
public int C { get; set; }
}
// an example object instance, let's say these values come from the DB
var ret = new Row { A = "a", B = null, C = 5 };
// the JSON string sent to the grid will look like this (notice B is omitted)
// "{ A: 'a', C: 5 }"
Теперь сетка покажет это как:
A B C
a undefined 5
И это подводит меня к моей проблеме. Всплывающая форма редактирования покажет «undefined» в текстовом поле для B, а также опубликует это на сервере. Поэтому, если я сохраню это в базе данных, в моей БД будет «undefined» вместо null.
Как мне получить jqGrid для сохранения нулевого значения в оба конца? Одно решение, которое мне кажется очень хакерским, основано на том, что Олег решил в другой ветке:
// override jqGrid serialization
jQuery.extend(jQuery.jgrid.edit, { ajaxEditOptions: { contentType: "application/json" }, serializeEditData: function (data) {
return JSON.stringify(data).replace(/"undefined"/g, 'null');
}});
Это будет работать, но кажется опасным, потому что он выполняет массовое редактирование данных без ведома пользователя. Если больше думать об этом, я думаю, что это фундаментальная проблема сохранения нулевого значения вместо «неопределенного» или какого-либо другого строкового представления нуля (пустой строки и т. Д.). Желаемое поведение будет:
- если свойство имеет значение null, а пользователь не изменяет значение, оно публикуется как null
- если пользователь изменяет значение, свойство больше не равно нулю
Можем ли мы заставить форму редактирования сетки вести себя подобным образом для обнуляемых свойств? Или мне нужно будет создать пользовательскую форму редактирования, которая будет отслеживать, что пользователь делает со свойством?