Строка динамической таблицы не обновляется с помощью вызова jquery ajax - PullRequest
2 голосов
/ 30 апреля 2009

При отправке данных через ajax-вызов jquery возникла небольшая проблема. По сути, значения формы полей формы, которые были динамически добавлены на экран в трубчатую сетку с использованием jquery, не обновляются в команде пакетного сохранения.

По сути, у меня есть список сетки, в котором отображаются все текущие строки, сохраненные в базе данных, где каждый столбец содержит поля формы. Затем у меня есть форма в верхней части страницы, которая является типичной , добавьте еще одну подробную форму. Вы вводите свои значения, нажимаете «добавить», они сохраняются в базе данных с помощью jjery json ajax-вызова, и ваши данные формы добавляются и отражаются в новой строке в таблице списков. (эта часть работает)

Моя проблема связана с тем, что вы хотите изменить значения формы в новой добавленной строке таблицы jquery . Когда нажата кнопка сохранения, будет восстановлена ​​только любая из уже построенных строк таблицы. Данные динамической формы строки не сохраняются. Вызов обновления использует привязку модели jquery ajax и ASP.NET MVC. В разделе «Добавить» я возвращаю «частичное представление» asp.net mvc в свой ответ jjery ajax, и он добавляется в таблицу с сеткой, используя $("#tablename tr:last").after(result).

То, что я уже вывел, - это, как сказано, новая динамически добавляемая строка не обновляется. У меня есть набор IList<Item>, возвращенный в моем списке привязки модели MVC для моего метода действия контроллера, который содержит весь список элементов, за исключением недавно созданных динамически добавляемых строк поля формы jquery. Это проблема, и поэтому, когда вы выполняете обновление страницы, строки возвращаются к исходным значениям формы, введенным при начальном добавлении.

Есть идеи, почему мои IList<Item> не будут включать эти динамически добавленные строки? При проверке в Firebug они используют один и тот же монастырь именования в своем атрибуте имени, и все должно быть в порядке.

Graham.

Обновление 1 мая 11:00 по Гринвичу +10: я получаю значения при изменении привязки модели с IList на FormCollection. Я не хочу использовать FormCollection, а не привязку модели, но возникает вопрос, могу ли я получить ее правильно через FormCol, почему бы не связывание модели IList? Я сравнил запись массива с рабочим элементом, и все они соответствуют одинаковым критериям и значениям.

Ответы [ 3 ]

5 голосов
/ 05 июня 2009

Я не программист ASP, но я чертовски много работаю с jquery. Если я правильно понимаю вашу проблему, ваши динамически генерируемые строки не связаны с функциями обратного вызова, которые будут выполнять ваши операции обновления.

Вы можете связать динамически сгенерированные элементы с обратным вызовом, используя либо функцию «live» jQuery (как пытался вам сказать Викидкака), либо вы можете связать вновь созданные элементы вручную в функции обратного вызова, которая запускается при активации ajax звонок возвращается.

Я бы порекомендовал использовать встроенную живую функцию, которая была добавлена ​​(я полагаю) в последний выпуск jQuery. Это избавит вас от необходимости писать дополнительные строки для ручного связывания обратных вызовов и облегчит обслуживание кода.

Так измените:

$('div.your-save-buttons').click(updateFunction);

до

$('div.your-save-buttons').live(updateFunction);
3 голосов
/ 03 июня 2009

Используйте плагин livequery для того, что вы пытаетесь сделать. Вы можете найти его здесь - http://docs.jquery.com/Plugins/livequery

Это не работает с большинством динамически добавляемых элементов:

$("select something").onSomeEvent("do something");

Но с помощью плагина livequery вы можете заставить его работать, изменив код JS на что-то вроде ниже:

$("select something").livequery('event name','do something');

0 голосов
/ 09 июня 2009

Если свойство вашей Модели представляет собой список целых чисел, вы можете использовать IEnumerable<int>, чтобы получить автоматическое связывание модели. Это работает как для метода Action, параметром которого является IEnumerable<int>, так и для метода Action, параметром которого является модель, свойство которой имеет значение IEnumerable<int>. Например, вот так:

<%= Html.Hidden("myField", 1) %>
<%= Html.Hidden("myField", 1) %>

и

public ActionResult Update(IEnumerable<int> myField) { }

или

public ActionResult Update(MyModel myModel) { }
public class MyModel {
    public IEnumerable<int> myField { get; set; }
}
...