2012-04-13 2 views
0

Я пытаюсь зарегистрировать несколько кнопок для регистрации событий, потому что продолжаю получать «Недопустимый аргумент обратной передачи или обратного вызова». Поскольку я пропускаю события кнопок вручную через __doPostBacks(), из-за проверки на стороне клиента, я думаю, что это как-то связано с этим.ClientScript.RegisterForEventValidation и __doPostBack()

Я отменяю Рендер использовать RegisterForEventValidation как это:

protected override void Render(HtmlTextWriter writer) 
{ 
    ClientScript.RegisterForEventValidation(btnNuevo.UniqueID); 
    ClientScript.RegisterForEventValidation(btnBorrar.UniqueID); 
    ClientScript.RegisterForEventValidation(btnEditar.UniqueID); 
    ClientScript.RegisterForEventValidation(btnAlquilar.UniqueID); 
    base.Render(writer); 
} 

Но __doPostBacks на странице стороны клиента .aspx написано так:

... 
__doPostBack('<%= btnNuevo.UniqueID %>', ""); 
... 
__doPostBack('<%= btnBorrar.UniqueID %>', selected.childNodes[0].innerText); 
... 
__doPostBack('<%= btnEditar.UniqueID %>', index); 
... 
__doPostBack('<%= btnAlquilar.UniqueID %>', indexaux); 

где selected.childNodes [0] .innerText, index и indexaux - это строки. Это все еще бросает это Исключение.

Я знаю, что есть перегрузка RegisterForEventValidation, где вы передаете ему ключ для элемента управления и аргументы.

Дело в том, что я не знаю, как это написать. Я не предполагаю, что вы должны знать, что такое аргумент, поскольку selecter, index и indexaux зависят от взаимодействия пользователя со страницей (а именно, выбора строки в GridView). Единственными примерами, которые я нахожу, являются те, где аргумент всегда один и тот же, поэтому они просто пишут RegisterForEventValidation («nameOfControl», «XXXX»), где «XXXX» является фиксированной строкой.

Любые идеи относительно того, как написать это, или если это не проблема?

Спасибо.

+0

Почему вам нужно позвонить '__doPostBack' вручную все для проверка на стороне клиента. Может быть, проще спросить, как использовать валидаторы ASP.NET с вашей проверкой clintside. Кроме того, я не понимаю, почему вызов '__doPostBack' должен бросать _« Недопустимый аргумент обратной передачи или обратного вызова.Источник этой ошибки находится где-то в другом месте. Вы меняете не кнопки на клиентах, а другие элементы управления, поэтому вам нужно зарегистрироваться эти и их допустимые значения (что ASP.NET не знает). –

+0

Ситуация такова: http://stackoverflow.com/questions/10126274/calling-a-code-behind-function-from-javascript-that- may-return-another-javascrip. Я полагал, что проблема связана с настройкой кнопок на событиях, которые должны сначала вызвать функцию Javascript, затем функцию C# и страницу, не зная или не узнающей это. Это или проблема с HOW GridView изменен (потому что кнопка, которая добавляет новый регистр на нем, работает нормально, но тот, который редактирует регистр, вызывая тот же ModalPopup и делая практически то же самое, выдает исключение Invalid Postback). – Heathcliff

ответ

1

Я не знаю, если вы установите на этом подходе, но вы можете просто установить EnableEventValidation ложь в директиве страницы:

<%@ Page Language="C#" EnableEventValidation="false" ... %> 
+0

Я предполагаю, что это это то, что OP actua lly хотят избежать, иначе он бы спросил, как предотвратить ошибку, а не как правильно использовать регистр RegisterForEventValidation. –

+0

@TimSchmelter: Возможно, вы правы. Я просто подумал, что представляю его как вариант, если OP не знает, что его можно отключить. –

+0

Нет, Тим Шмельтер прав: Я пытаюсь избежать отключения EventValidator страницы. – Heathcliff