Значения ASP.Net ListBox не публикуют изменения после манипуляции jQuery? - PullRequest
1 голос
/ 03 сентября 2010

У меня есть страница ASP.Net с двумя компонентами ListBox, отображаемыми в браузере как <select> списки.Я использую jQuery для перемещения элементов из одного списка в другой, манипулируя DOM.Затем я выбираю все элементы с помощью мыши и отправляю обратно форму.Таким образом, все элементы списка публикуются в форме.

Когда я отправляю форму, в моем обработчике события button_save () значения Request.Form [<<listbox ID>>] являются правильными.Однако сами элементы управления ListBox, в частности их коллекции Items, не отражают мои изменения.

Я также использовал Fiddler для изменения выбранных элементов и отправки формы.Как и выше, значения ListBox не отличаются, хотя значения Request.Form.Кто-нибудь знает, что происходит или какие неправильные предположения я делаю?

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Я считаю, что основная проблема заключается в следующем: параметры ListBox хранятся в состоянии просмотра страницы. Когда вы используете клиентский javascript / jquery для изменения содержимого списка, эти изменения не отражаются в состоянии просмотра. Таким образом, когда вы выполняете обратную передачу, ASP.NET использует представление для создания списков для вашего кода, и ваши изменения на стороне клиента теряются.

Один из способов решения этой проблемы - манипулирование содержимым списков с помощью обратной передачи, а не на стороне клиента (javascript / jquery). Делая это таким образом, все изменения в списках включаются в представление состояния и, таким образом, остаются согласованными для каждой обратной передачи.

Я большой поклонник jquery (гораздо больше, чем постбэков или MS-Ajax / частичных постбэков), поэтому я полностью понимаю, что этот подход может быть не очень привлекательным. К сожалению, это единственный, о котором я могу думать прямо сейчас. Может быть, другие stackoverflow'ы будут иметь лучшие альтернативы.

1 голос
/ 03 сентября 2010

Я считаю, что проблема в том, что сервер создает объект ListBox, который не знает об изменениях, внесенных в поле выбора на стороне клиента.Другими словами, он использует разметку ASP.NET для создания списка элементов, а не информацию, отправленную из запроса.

Я не знаю никакого обходного пути, кроме доступа к Запросу.. Прямые значения.

0 голосов
/ 05 августа 2011

Ларри, если ты не нашел решения, вот что я бы сделал.

Как заявили другие участники, поскольку вы изменяете DOM на стороне клиента, эти изменения не отражаются в ViewState, и поэтому вы не можете получить доступ к новым значениям из выделенного кода.

В качестве решения вы можете создать скрытое значение и установить его значение в сериализованную форму списков (объединенные пары значение / текст) при каждом изменении списка с помощью jQuery. Затем вы можете получить доступ к скрытому значению из кода и, наконец, десериализовать его, чтобы получить все изменения. Метод довольно прост на самом деле.

...