Доступ к DOM для получения значений из таблицы HTML на стороне сервера - PullRequest
0 голосов
/ 10 января 2011

Я создал эстетический элемент управления, который создает два списка в отдельных тегах div, организованных с таблицей для каждого. Элемент управления всегда пользователь нажимает на тег img, связанный с каждым элементом, чтобы перемещать его между двумя списками. Я делаю все перемещения между списками с помощью JavaScript и хочу иметь хороший метод для получения значений и хранения их в двух списках при обратной передаче. Я думал о том, чтобы сделать что-то вроде хранения индексов / классов в скрытых значениях и их чтения, чтобы найти элементы, но это кажется грязным. Кроме того, думал, что может быть умный способ обхода DOM через FindControl (), но не уверен. Любой вклад был бы великолепен.

Еще одна вещь - это не составной элемент управления. Все теги отображаются в методе RenderContents (). Так что я не знаю, есть ли способ даже прикрепить атрибут runat = "server" к элементу, как я обычно делал бы, если бы хотел получить код за доступом к элементу html.

Вот сгенерированный HTML. Я не думаю, что нужно публиковать код на стороне сервера, так как на этом этапе он генерирует только HTML.

<div class="DualListPanel" id="test1">
   <div key="test1_Unassigned">
      <table class="DLPTable">
         <tr>
            <td>Item 1</td>
            <td><img src="..." onclick="Move(this)" /></td>
         </tr>
         <tr>
            <td>Item 2</td>
            <td><img src="..." onclick="Move(this)" /></td>
         </tr>
      </table>
   </div>
   <div key="test1_Assigned">
      <table class="DLPTable">
      </table
   </div>
</div>

Ответы [ 2 ]

1 голос
/ 10 января 2011

Вы не можете использовать FindControl () для разбора клиентского скрипта.Если вы хотите отслеживать изменения, сделанные на клиенте, чтобы вы могли настроить данные на сервере, вы должны использовать скрытое поле, сохранить изменения.Скрытое поле - единственный способ в этом случае заставить взаимодействие клиента с сервером работать.

0 голосов
/ 10 января 2011

Другой ответ - правильный подход.Нет ничего сложного в хранении данных в скрытом поле.Это самый простой способ взаимодействия клиента и сервера.

Но я хотел опубликовать другую альтернативу, которая заключается в использовании AJAX и WebMethod.С jQuery это очень просто.Ваш обработчик отправки может сделать POST для WebMethod с любой необходимой информацией о новом порядке списка (даже включая весь HTML, если вы действительно хотите сделать это таким образом, хотя я думаю, что отслеживание изменений в состоянии или порядковых значениях по мере необходимостибыть намного проще).Затем метод может обновить базу данных.Если вы хотите получить настоящее воображение, вы можете подключиться к серверу в режиме реального времени (например, каждый раз, когда они перемещают что-то на клиенте) с помощью асинхронного метода.

Не зная контекста, это, вероятно, излишне,но это другой путь, который имеет свое время и место.

...