Как зарегистрировать добавленные данные на стороне клиента для проверки обратной передачи на стороне сервера? - PullRequest
1 голос
/ 04 августа 2011

Если я добавляю элементы к элементу Select на стороне клиента и затем отправляю форму, я получаю следующую ошибку: -

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

Я не хочу отключать EventValidation.Как я могу зарегистрировать данные, добавленные на стороне клиента, к определенному элементу для проверки обратной передачи на стороне сервера?

Я знаю, что метод RegisterForEventValidation есть, но я никогда не использовал его, и даже непонять из MSDN.

Если кто-нибудь когда-либо делал это, не могли бы вы поделиться примером кода с кратким объяснением?

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Если честно, мне никогда не везло с этим, я обнаружил, что гораздо проще подклассить необходимый элемент управления именно в этом конкретном случае, чтобы избежать попытки ASP.NET его проверить. Это лучше, чем проверка достоверности для страницы, поскольку все, кроме этого элемента управления, будет проверяться как всегда. Я предполагаю, что в вашем случае вы используете серверный HtmlSelect (то же самое можно сделать с DropDownList). Вот один из вариантов:

public class NoEventValdationHtmlSelect : HtmlSelect
{
}

Вам нужно будет извлечь выбранное значение с помощью Request.Form [UniqueNameOfControl], поскольку SelectedIndex / Value / Item будет нулевым на стороне сервера.

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

В моем случае я заранее знаю все значения, которые можно добавить в ListBox на стороне клиента, поэтому, к счастью, для этого есть решение:

protected override void Render(HtmlTextWriter writer)
{
 Page.ClientScript.RegisterForEventValidation(lstBox.UniqueID, "ListItemValue 
 that can be added at client side");
 base.Render(writer);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...