jqGrid сохранение строки с пустыми столбцами - PullRequest
0 голосов
/ 18 февраля 2011

Итак, у меня есть 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
  • если пользователь изменяет значение, свойство больше не равно нулю

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

1 Ответ

2 голосов
/ 18 февраля 2011

Надеюсь, я понимаю вашу проблему.В одном из моих приложений, где я использовал jqGrid, у меня когда-то была проблема со значениями NULL.Во время разработки приложения я не был уверен, как решить проблему, и поместил на стороне сервера текстовое значение «(NULL)» вместо null значения одного свойства.Сетка предназначена для опытных пользователей, которые понимают, что такое "(NULL)".Значение «(NULL)» не имеет смысла в поле (у него не было учетной записи пользователя с именем) и внутри серверного кода для операции редактирования. Я мог отличить значение «(NULL)» от значения реального поля.В способе, которым я мог бы решить эту проблему.

В вашем случае вы должны решить по крайней мере две проблемы:

  1. Вы должны решить, как значение null должно быть отображается .«Неопределенный» текст кажется мне не лучшим.Вы можете решить проблему с помощью «неопределенного» текста либо на стороне сервера (как я это делал в моем случае), либо в отношении custom formatter . пользовательский форматер - это очень простая вещь.Он определяет, как значение ячейки должно отображаться как фрагмент HTML из <td>.Например, вы можете включить дополнительный скрытый элемент <span> или другой элемент или атрибут HTML, который сохранит информацию о том, что значение было null.
  2. . Проблема должна решаться с помощью decoding значения null на стороне сервера во время операций редактирования.Вы можете очень легко решить эту проблему на стороне сервера (как я это делаю при сравнении соответствующего поля с «(NULL)») или с учетом нестандартного на стороне клиента.Пользовательский неотформататор будет получать информацию из ячейки сетки (из скрытого <span> или другого скрытого элемента или атрибута HTML) и помещать информацию в запрос к серверу.

Вы можете посмотреть демо для ответа , чтобы увидеть пример того, как можно использовать скрытый <span> для сохранения дополнительной информации в ячейке относительно пользовательского форматера и читать информацию позже относительно нестандартного форматера .

...