Выберите элемент DropDownList внутри элемента управления Repeater

У меня есть повторитель, который содержит несколько элементов, среди которых есть DropDownList и Button.

Цель здесь - связать элемент из DDL с выбранной строкой повторителя.

Код ASPX:

<asp:Repeater ID="sharedPlansList" runat="server"
    onitemdatabound="sharedPlansList_ItemDataBound"
    onitemcommand="sharedPlansList_ItemCommand">
    <ItemTemplate>
        <div>
            <h1>&middot; <%# Eval("ProductName") %></h1>
            <div>
            Associer le domaine : 
            <asp:DropDownList runat="server" ID="domainList" />
            <asp:Button ID="associateDomaine" Text="Associer" runat="server"
                CommandArgument='<%# Container.DataItem %>' />
            </div>
            <div>
                Domaines : 
                <asp:BulletedList runat="server" ID="sharedPlanDomains" />
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>

Проблема:

Когда я нажимаю кнопку, я каждый раз получаю исключение Invalid Postback или Callback (Недействительный аргумент обратной передачи или обратного вызова. Проверка события включена с помощью конфигурации или ‹% @ Page EnableEventValidation =" true "%> на странице. В целях безопасности это функция проверяет, что аргументы для событий обратной передачи или обратного вызова исходят от серверного элемента управления, который их изначально визуализировал. Если данные действительны и ожидаются, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки.). Но все кажется действительно стандартным, без чего-то действительно экзотического. Я тоже ничего не добавляю и не добавляю с помощью javascript.

Я видел решения, в которых вы могли бы поместить <pages enableEventValidation="false" /> в web.config, но я не уверен, что это хорошее решение, так как я хочу сохранить встроенную модель безопасности asp.net.

Есть ли обходной путь?


person Erick    schedule 23.07.2009    source источник
comment
Действительно ли этот CommandArgument / Name работает? Потому что у меня есть что-то подобное, и я вообще не могу заставить его работать! Полностью игнорирует аргумент команды.   -  person Sebastian    schedule 01.09.2009


Ответы (2)


Я не могу быть уверен, не проверив немного ваш код (что у меня нет времени делать прямо сейчас), но можете ли вы проверить, является ли виноват динамический CommandArgument, который вы назначаете своей кнопке? Если вынуть, то ошибка то и дело выскакивает?

В этом случае вы можете попытаться обработать каждую строку в обработчике OnItemDataBound и вызвать

ClientScript.RegisterForEventValidation("associateDomaine", -->CommandArgHere<--);
person womp    schedule 23.07.2009
comment
Он не связан, поскольку ошибка возникла до того, как был добавлен CommandArgument: / - person Erick; 24.07.2009

Лучшим решением будет заменить DropDownList вашим собственным DropDownList. Создайте подкласс DropDownList и используйте этот список на странице ASPX. Я думаю, что содержимое вашего DropDownList изменено на стороне клиента (может быть, с помощью Javascript?).

person A freelancer    schedule 12.10.2013