ASP.Net - <select>элементов не публикуются после заполнения списка jQuery - PullRequest
4 голосов
/ 27 августа 2010

У меня есть ASP.Net ListBox, который я пытаюсь заполнить с помощью jQuery, используя следующий фрагмент:

    $("#MyList_btnAddAll").click(function(e) {
    e.preventDefault();
    $('#MyList_lstAll option').appendTo('#MyList_lstSelected');
});

На самом деле в коде есть два ListBox, один из которых является «источником», а другой - «местом назначения». Как вы можете сказать выше, ListBoxes - это MyList_lstAll и MyList_lstSelected. Как и следовало ожидать, они отображаются в браузере как элементы.

JQuery работает отлично, элементы перемещаются из одного ListBox в другой, DOM обновляется, но когда я публикую свою страницу, обратная передача не указывает на какие-либо изменения в ListBox. Я знаю, что есть ошибки, связанные с обратными передачами jQuery и ASP.Net, но кто-то может подсказать мне немного о том, что происходит и как я могу заставить это работать?

[EDIT]

По запросу, вот еще несколько результатов ASP.Net и HTML. Ниже перечислены объявления ListBox и кнопки в элементе управления ascx, который их содержит:

 <GLP:ListBox ID="lstAll" CssClass="LIST_BOX_MEDIUM" runat="server" SelectionMode="Multiple"/>

<asp:LinkButton ID="lnkAddAll2" CssClass="LIST_SELECT" runat="server" OnClick="btnAddAll_Click"/>

<GLP:ListBox ID="lstSelected" CssClass="LIST_BOX_MEDIUM" runat="server" SelectionMode="Multiple"/>

И полученный HTML:

<select class="LIST_BOX_MEDIUM" id="MyList_lstAll" multiple="multiple" name="MyList:lstAll" size="4">
 <option value="641">Item1</option><option value="598">Item2</option>
</select>

<input type="submit" class="BUTTON_SMALL_N0_IMAGE" id="MyList_btnAddAll" value="Add All" name="MyList:btnAddAll" style="color: rgb(0, 0, 0);">

<select class="LIST_BOX_MEDIUM" id="MyList_lstSelected" multiple="multiple" name="MyList:lstSelected" size="4">
 <option value="642">Item3</option><option value="599">Item4</option>
</select>

Я знаю, что изменения элемента jQuery / ListBox не отражаются в ViewState, но, поскольку они находятся в DOM, когда страница публикуется, они не будут включены в данные обратной передачи и затем выбраны соответствующими элементами управления?

Ответы [ 3 ]

4 голосов
/ 27 августа 2010

IIRC, вы не можете заставить это работать из-за того, что ASP.Net ожидает в ListBox при обратной передаче.В прошлом я использовал способ создания скрытого поля ввода с помощью runat = "server" и заполнения там выбранных идентификаторов, разделенных точкой с запятой.

Скрытое значение ввода будет доступно при обратной передаче.

3 голосов
/ 27 августа 2010

Я думаю, вам нужно будет получить список выбранных элементов непосредственно из запроса, а не из свойств элемента управления asp.net, например:

string results = Request.Form[list_box.UniqueID];
1 голос
/ 27 августа 2010

Проблема в том, что ваш элемент управления воссоздается при обратной передаче с использованием состояния просмотра (или состояния элемента управления), которое, конечно, не отражает ваши изменения. Одна возможность - получить доступ к сообщению напрямую, используя объект Request на стороне сервера (как сказал Рэй чуть ранее)

...