лучший способ для перемещения элементов между списками в ASP.NET с использованием JavaScript, а затем получить доступ к результатам на стороне сервера - PullRequest
2 голосов
/ 05 февраля 2011

У меня много проблем с, казалось бы, простой вещью. В веб-форме ASP.NET у меня есть два ListBox, с кнопками Add и Remove между ними. Пользователь может выбрать элементы в одном ListBox и с помощью кнопок поменять их местами.

Я делаю это на стороне клиента, используя javascript.

У меня также есть кнопка SAVE, которую я хочу обработать на стороне сервера, когда пользователь доволен своим списком.

Проблемы: Сначала у меня возникла следующая проблема, когда я нажал SAVE:

*

Недопустимый аргумент обратной передачи или обратного вызова. Проверка события включена с использованием в конфигурации или <% @ Page EnableEventValidation = "true"%> на странице. В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова исходят от серверного элемента управления, который первоначально их представил. Если данные верны и ожидаемы, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки.

*

Я прочитал, что одним из способов обойти это было поместить мои ListBox в UpdatePanel, что я и сделал, и я продолжаю.

Однако теперь обработчик события для события Click кнопки не запускается, если пользователь использовал клиентский JavaScript для изменения содержимого списков. Если пользователь не изменил содержимое списков, обработчик выполнится.

Что происходит?

Является ли мой подход в основном ошибочным, и, возможно, существует гораздо лучший подход к этой проблеме?

спасибо за любую помощь!

Вот код ASPX:

    <table>
        <tr>
            <td>
                <asp:ListBox ID="fromListBox" runat="server" SelectionMode="Multiple" Rows="8" AutoPostBack="false" 
                    DataSourceID="SqlDataSource1" DataTextField="FullName" DataValueField="UserId" CssClass="teamListBox">
                </asp:ListBox>

            </td>

            <td> 
                <input id="btnAdd" type="button" value="Add >" /><br/>
                <br/>
                <input id="btnRemove" type="button" value="< Remove" /><br/>
                <br/>
            </td>

            <td>
                <asp:ListBox ID="toListBox" runat="server" SelectionMode="Multiple" Rows="8" AutoPostBack="false"
                    CssClass="teamListBox" DataSourceID="SqlDataSource2" DataTextField="FullName" 
                    DataValueField="UserId" >
                </asp:ListBox>  
            </td>
        </tr>
    </table>

Вот javascript, использующий jquery .... это отлично работает, так что на самом деле это не проблема:

    $(document).ready(function () {

        $("#btnAdd").click(function () {
            $("#fromListBox option:selected").appendTo("#toListBox");
        });

        $("#btnRemove").click(function () {
            $("#toListBox option:selected").appendTo("#fromListBox");
        });

    });

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

Просто зайдите в ваш веб-файл конфигурации в вашем приложении и добавьте enableEventValidation = "false" в страниц раздел.

0 голосов
/ 05 февраля 2011

Чистым способом было бы использовать ClientScriptManager.RegisterForEventValidation Метод.

Смотрите также здесь .

Необходимо зарегистрировать идентификатор серверного элемента управления со всеми возможными значениями, которые могут быть опубликованы JavaScript этим элементом управления в событии рендеринга страницы, например:

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
   ClientScript.RegisterForEventValidation("fromListBox", "English");
   ClientScript.RegisterForEventValidation("fromListBox", "Tamil");
   ClientScript.RegisterForEventValidation("fromListBox", "Hindi");
   ClientScript.RegisterForEventValidation("toListBox", "English");
   ClientScript.RegisterForEventValidation("toListBox", "Tamil");
   ClientScript.RegisterForEventValidation("toListBox", "Hindi");
   base.Render(writer);
}
0 голосов
/ 05 февраля 2011

Я думаю, что у меня была такая же проблема некоторое время назад. Я решил это, присвоив значения моего списка в скрытом текстовом поле и отправив страницу с использованием JavaScript. На стороне сервера я прочитал значение этого скрытого текстового поля и проанализировал его. Это был некрасивый клиент-серверный код, но он работал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...