Строка динамической таблицы не обновляется с помощью вызова jquery ajax

StackOverflow https://stackoverflow.com/questions/805803

Вопрос

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

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

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

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

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

Грэм.

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

Это было полезно?

Решение

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

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

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

Итак, измените:

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

к

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

Другие советы

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

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

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

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

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

Если свойство вашей модели представляет собой список целых чисел, вы можете использовать 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; }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top