Я получаю следующую ошибку, когда отправляю обратно страницу со стороны клиента. У меня есть код JavaScript, который изменяет asp: ListBox на стороне клиента.
Как мы это исправим?
Подробности ошибки ниже:
Server Error in '/XXX' Application.
--------------------------------------------------------------------------------
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
Ответы:
Проблема в том, что ASP.NET не узнает об этом дополнительном или удаленном элементе списка. У вас есть несколько вариантов (перечислены ниже):
Надеюсь, это поможет.
источник
У вас есть коды в ваших событиях Page_Load? если да, то, возможно, добавление следующего поможет.
Эта ошибка выдается, когда вы нажимаете на вашу команду и снова запускается Page_load, в обычном жизненном цикле будет Page_Load -> Нажмите Command -> Page_Load (снова) -> Process ItemCommand Event
источник
У меня был опыт работы с DataGrid. Одним из столбцов была кнопка «Выбрать». Когда я нажимал кнопку «Выбрать» в любой строке, я получил это сообщение об ошибке:
Я изменил несколько кодов, и, наконец, мне это удалось. Мой опыт маршрута:
1) Я изменил атрибут страницы на
EnableEventValidation="false"
. Но это не сработало. (не только это опасно по соображениям безопасности, мой обработчик событий не вызывался:void Grid_SelectedIndexChanged(object sender, EventArgs e)
2) Я реализовал
ClientScript.RegisterForEventValidation
метод Render. Но это не сработало.3) Я изменил тип кнопки в столбце сетки с
PushButton
наLinkButton
. Это сработало! ("ButtonType =" LinkButton "). Думаю, если вы сможете изменить свою кнопку на другие элементы управления, такие как" LinkButton ", в других случаях она будет работать правильно.источник
Button
не работает, когдаlinkButton
работает по той же программе. Если это так, мы должны всегда использоватьlinkButton
? Как мы могли бы сделать более гибким?Вы действительно хотите сделать 2 или 3, не отключайте проверку события.
Есть две основные проблемы с добавлением элементов на стороне клиента asp: listbox.
Во-первых, это мешает проверке событий. То, что вернулось на сервер, не то, что оно отправило.
Во-вторых, даже если вы отключите проверку события, когда ваша страница будет отправлена обратно, элементы в списке будут перестроены из состояния просмотра, поэтому любые изменения, сделанные вами на клиенте, будут потеряны. Причина этого заключается в том, что asp.net не ожидает, что содержимое списка будет изменено на клиенте, он только ожидает выбора, поэтому он отбрасывает любые изменения, которые вы могли сделать.
Наилучший вариант, скорее всего, использовать панель обновления, как было рекомендовано. Другой вариант, если вам действительно нужно сделать это на стороне клиента, это использовать простой старый
<select>
вместо a<asp:ListBox>
и сохранить список элементов в скрытом поле. Когда страница отображается на клиенте, вы можете заполнить ее, разделив содержимое текстового поля.Затем, когда вы будете готовы опубликовать его, вы заполняете содержимое скрытого поля из вашего измененного
<select>
. Затем, конечно, вы должны снова разделить это на сервере и что-то сделать со своими элементами, так как ваш выбор пуст, теперь, когда он вернулся на сервер.В общем, это довольно громоздкое решение, которое я бы не рекомендовал, но если вам действительно нужно вносить изменения в listBox на стороне клиента, оно работает. Однако, я бы порекомендовал вам заглянуть в панель обновления, прежде чем идти по этому пути.
источник
<select>
, который решил проблему. Подскажите, пожалуйста, почему Updatepanel тратит много времени на загрузку данных по сравнению с загрузкой данных ajax на стороне клиента.?У меня была такая же проблема с Repeater, потому что у меня была веб-страница с элементом управления Repeater на веб-сайте, на котором была включена функция EnableEventValidation. Это было не хорошо. Я получаю недопустимые исключения, связанные с обратной передачей.
То, что работало для меня, было установить EnableViewState = "false" для повторителя. Преимущества заключаются в том, что его проще использовать, так же как и отключение проверки события для веб-сайта или веб-страницы, но область действия намного меньше, чем отключение проверки события для обоих.
источник
Ничто из вышеперечисленного не помогло мне. После дальнейших раскопок я понял, что пропустил 2 формы, примененные на странице, которая вызывала проблему.
Имейте в виду, что недавно ASP.NET начал рассматривать iframes внутри тега формы, который содержит тег формы в самом документе iframe как вложенный фрейм. Мне пришлось переместить iframe из тега формы, чтобы избежать этой ошибки.
источник
У меня была такая же проблема при изменении ListBox с помощью JavaScript на клиенте. Это происходит, когда вы добавляете новые элементы в ListBox от клиента, которых не было при визуализации страницы.
Исправление, которое я нашел, состоит в том, чтобы информировать систему проверки событий обо всех возможных допустимых элементах, которые можно добавить с клиента. Вы делаете это путем переопределения Page.Render и вызова Page.ClientScript.RegisterForEventValidation для каждого значения, которое ваш JavaScript может добавить в список:
Это может быть болезненно, если у вас есть большое количество потенциально допустимых значений для списка. В моем случае я перемещал элементы между двумя списками ListBox - один, который имеет все возможные значения, и другой, который изначально пуст, но заполняется подмножеством значений из первого в JavaScript, когда пользователь нажимает кнопку. В этом случае вам просто нужно перебрать элементы в первом ListBox и зарегистрировать каждый из них во втором списке:
источник
Еще один способ, не упомянутый здесь, это создать подкласс ListBox
То есть.
ClientEventValidation отключает атрибут System.Web.UI.SupportsEventValidation, если вы создаете его подкласс, если вы не добавите его явно, он никогда не вызовет процедуру проверки. Это работает с любым элементом управления, и я нашел единственный способ «отключить» его для элемента управления на основе элемента управления (т. Е. Не на уровне страницы).
источник
вы пытаетесь что-то подобное на своей странице .aspx
Добавить
Вы можете задать любой вопрос!
источник
Если вы заполняете DropdownList через скрипт на стороне клиента, то очистите список, прежде чем отправить форму обратно на сервер; тогда ASP.NET не будет жаловаться, и безопасность будет все еще включена.
И чтобы получить данные, выбранные из DDL, вы можете прикрепить событие «OnChange» к DDL, чтобы собрать значение в скрытом вводе или в текстовом поле со стилем = «display: none;»
источник
Хотел бы я проголосовать за тебя, Амир (увы, мой представитель слишком низкий.) У меня просто была эта проблема, и изменение ее работало как чемпион в моем сетке. Немного в стороне, я думаю, правильный код: ButtonType = "Link"
Я подозреваю, что это потому, что когда вы нажимаете «изменить», ваши изменения изменяются на «обновить» и «отменить», которые затем возвращаются к «редактировать» при отправке. И эти переменные элементы управления делают .net неудобным.
источник
(1) EnableEventValidation = "false" ................... Это не работает для меня.
(2) ClientScript.RegisterForEventValidation .... Это не работает для меня.
Решение 1:
Измените Button / ImageButton на LinkButton в GridView. Оно работает. (Но мне нравится ImageButton)
Исследование: Button / ImageButton и LinkButton используют разные методы для обратной передачи
Оригинальная статья:
http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx
Решение 2:
В OnInit () введите код примерно так, чтобы установить уникальный идентификатор для Button / ImageButton:
Оригинальная статья:
http://www.c-sharpcorner.com/Forums/Thread/35301/
источник
Я реализовал вложенный вид сетки и столкнулся с той же проблемой. Я использовал LinkButton вместо кнопки изображения, например:
прежде чем у меня была такая колонка:
Я заменил, как это.
источник
У меня была похожая проблема, но я не использовал ASP.Net 1.1 и не обновлял элемент управления через javascript. Моя проблема возникла только в Firefox, а не в IE (!).
Я добавил параметры в DropDownList для события PreRender, например:
В моем "HF" (скрытое поле) параметры были разделены новой строкой, например:
Проблема заключалась в том, что HTML-страница была разбита (я имею в виду новые строки) в параметрах «select», представляющих DropDown.
Поэтому я решил свою проблему, добавив одну строку:
Надеюсь, это поможет кому-то.
источник
если вы измените
UseSubmitBehavior="True"
кUseSubmitBehavior="False"
вашей проблемы будет решенаисточник
У меня была та же проблема, что и я:
Просто добавил условие
if(!IsPostBack)
и все работает отлично :)источник
Эта ошибка будет отображаться без обратной передачи
Добавить код:
источник
В этом случае добавьте идентификатор к кнопке в RowDataBound сетки. Это решит вашу проблему.
источник
Простым решением этой проблемы является использование проверки IsPostBack при загрузке вашей страницы. Это решит эту проблему.
источник
Ajax UpdatePanel делает это, и я думаю, что это самый простой способ, игнорируя издержки обратной передачи Ajax .
источник
Я знаю, что это супер-старый пост. Предполагая, что вы звоните в свое приложение, вот идея, которая работает для меня:
Если вам не нужен полный контроль, вы можете использовать панель обновления, которая сделает это за вас.
источник
Мы столкнулись с этой же проблемой, когда преобразовывали наши обычные страницы ASPX в страницы контента.
Страница с этой проблемой имела
</form>
тег в одном из разделов контента, таким образом, два конечных тега формы отображались во время выполнения, что вызвало эту проблему. Удаление дополнительного тега конца формы со страницы решило эту проблему.источник
<form>
поля в коде.Если вы используете gridview и не привязываете gridview при загрузке страницы внутри! Ispostback, то эта ошибка возникает, когда вы нажимаете на edit и удаляете строку в gridview.
источник
Четыре минуты назад я получил ту же ошибку. Тогда я исследовал в течение получаса, как ты. На всех форумах они обычно говорят «добавить страницу enableEvent .. = false или true». Любое предложенное решение не решило мои проблемы, пока я не нашел его. К сожалению, проблема в кнопке ASP.NET. Я удалил это две секунды назад. Я попытался заменить на кнопку «imagebutton», но это также было неприемлемо (потому что оно выдало ту же ошибку).
Наконец я заменил на
LinkButton
. Кажется, это работает!источник
Я использовал Datalist, и я получил ту же ошибку для моей кнопки. Я просто использую IsPostBack, чтобы проверить и заполнить свои элементы управления, и проблема решена! Большой!!!
источник
Для меня сработало перемещение следующего кода из page_load в page_prerender:
источник
Лучший вариант - использовать скрытое поле и не отключать проверку событий, а также изменить каждый список, выпадающий список для выбора с атрибутом сервера runat.
источник
Если вы используете панель обновления Ajax. Добавьте
<Triggers>
тег и внутри него вызовите кнопку или элемент управления, вызывающий postBack с помощью<asp:PostBackTrigger .../>
источник
Если вы заранее знаете, какие данные могут быть заполнены, вы можете использовать ClientScriptManager для решения этой проблемы. У меня была эта проблема при динамическом заполнении выпадающего списка с использованием JavaScript при предыдущем выборе пользователя.
Вот пример кода для переопределения метода рендеринга (в VB и C #) и объявления потенциального значения для выпадающего списка ddCar.
В VB:
или небольшое изменение в C # может быть:
Для новичков: это должно идти в коде файла (.vb или .cs) или, если используется в файле aspx, вы можете заключить в
<script>
теги.источник
Это было причиной, почему я получил это:
У меня был ASP: ListBox. Изначально это было скрыто. На стороне клиента я бы заполнил его через AJAX с опциями. Пользователь выбрал один вариант. Затем, нажав кнопку «Отправить», сервер рассмеялся над ListBox, так как не помнил, чтобы у него были какие-либо параметры.
Так что я сделал, чтобы убедиться, что я очистил все параметры списка перед отправкой формы на сервер. Таким образом, сервер не жаловался, так как список ушел к клиенту пустым и вернулся пустым.
Сортировка !!!
источник