Неверный аргумент обратной передачи или обратного вызова. Проверка события включена с помощью «<pages enableEventValidation =« true »/>»

238

Я получаю следующую ошибку, когда отправляю обратно страницу со стороны клиента. У меня есть код 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
Юлиус А
источник
Не выполняйте привязку данных в событии page_load.
Пол Захра

Ответы:

171

Проблема в том, что ASP.NET не узнает об этом дополнительном или удаленном элементе списка. У вас есть несколько вариантов (перечислены ниже):

  • Отключить проверку событий (плохая идея, потому что вы теряете немного безопасности, которая приходит с очень небольшими затратами).
  • Используйте ASP.NET Ajax UpdatePanel. (Поместите список в панель обновлений и запустите обновление, если вы добавляете или удаляете список. Таким образом, viewstate и связанные с ним поля получают обновления, и проверка событий будет проходить.)
  • Забудьте на стороне клиента и используйте классическую обратную передачу и добавьте или удалите серверную часть списка.

Надеюсь, это поможет.

Норберт Б.
источник
Еще один вариант: реализовать IPostBackEventHandler и вызвать js __doPostBack ('<% = UniqueId.ToString ()%>', arg)
gdbdable
Исходя из приведенных выше предложений, я поместил свои выпадающие списки в обычную ASP.NET asp: UpdatePanel, загрузил выпадающие списки в коде и затем upNewRecord.Update ();
Рикардо Эпплтон
183

У вас есть коды в ваших событиях Page_Load? если да, то, возможно, добавление следующего поможет.

if (!Page.IsPostBack)
{ //do something }

Эта ошибка выдается, когда вы нажимаете на вашу команду и снова запускается Page_load, в обычном жизненном цикле будет Page_Load -> Нажмите Command -> Page_Load (снова) -> Process ItemCommand Event

Джефф Пан
источник
7
ага! Спасибо большое, это был трюк в моем случае! Я перезагрузил выпадающий список в загрузке страницы, и поэтому фреймворк потерял контроль над элементами (новыми) в ddl, и тем, который я щелкнул (которого больше не было)
Мишель
У меня была та же ошибка, что и у OP ... Я использовал мастер в своей форме и вызывал шаг 0 при загрузке страницы. убрал это и проблема исчезла. Спасибо ...
tking
Большое спасибо за этот ответ .... Была такая же проблема, и оказалось, что я просто забыл игнорировать постбэки при загрузке данных в мою сетку ... сэкономить мне много времени
Quagmire
10
Duh! Возвращение к веб-формам из MVC - это боль. Это правильный ответ
Вишну Рат
2
Я сделал это, но у меня это не сработало, потому что есть код, который мне нужно запустить в событии page_load, когда это не постбэк, и поэтому я все еще получаю ту же ошибку. Отключение режима просмотра моего ретранслятора решило проблему.
Брайан
40

У меня был опыт работы с DataGrid. Одним из столбцов была кнопка «Выбрать». Когда я нажимал кнопку «Выбрать» в любой строке, я получил это сообщение об ошибке:

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

Я изменил несколько кодов, и, наконец, мне это удалось. Мой опыт маршрута:

1) Я изменил атрибут страницы на EnableEventValidation="false". Но это не сработало. (не только это опасно по соображениям безопасности, мой обработчик событий не вызывался:void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) Я реализовал ClientScript.RegisterForEventValidationметод Render. Но это не сработало.

protected override void Render(HtmlTextWriter writer)
{
    foreach (DataGridItem item in this.Grid.Items)
    {
        Page.ClientScript.RegisterForEventValidation(item.UniqueID);
        foreach (TableCell cell in (item as TableRow).Cells)
        {
            Page.ClientScript.RegisterForEventValidation(cell.UniqueID);
            foreach (System.Web.UI.Control control in cell.Controls)
            {
                if (control is Button)
                    Page.ClientScript.RegisterForEventValidation(control.UniqueID);
            }
        }
    }
}

3) Я изменил тип кнопки в столбце сетки с PushButtonна LinkButton. Это сработало! ("ButtonType =" LinkButton "). Думаю, если вы сможете изменить свою кнопку на другие элементы управления, такие как" LinkButton ", в других случаях она будет работать правильно.

Амир Чатрбар
источник
1
Моим решением было отказаться от вложенных кнопок в сетке данных. MS снова подводит меня
Jacobs Data Solutions
Ваше решение работает для меня тоже. Спасибо. Но я хочу знать, почему Buttonне работает, когда linkButtonработает по той же программе. Если это так, мы должны всегда использовать linkButton? Как мы могли бы сделать более гибким?
Франк Мят Чт
8
Попробуйте добавить к своей кнопке UseSubmitBehavior = "False" stackoverflow.com/questions/2968525/…
JJschk
Awesomeeeeeee :) .. Вы можете научиться этому только на собственном опыте .. Вы доказали, что настоящий SSCNERIO TAT показывает Опыт лучший учитель .. Отличный ответ и объяснение!
saun4frsh
В переопределении для Render ВЫ ДОЛЖНЫ ПОСТАВИТЬ base.Render (писатель); в конце концов ... иначе не получится!
Пол Захра
28

Вы действительно хотите сделать 2 или 3, не отключайте проверку события.

Есть две основные проблемы с добавлением элементов на стороне клиента asp: listbox.

  • Во-первых, это мешает проверке событий. То, что вернулось на сервер, не то, что оно отправило.

  • Во-вторых, даже если вы отключите проверку события, когда ваша страница будет отправлена ​​обратно, элементы в списке будут перестроены из состояния просмотра, поэтому любые изменения, сделанные вами на клиенте, будут потеряны. Причина этого заключается в том, что asp.net не ожидает, что содержимое списка будет изменено на клиенте, он только ожидает выбора, поэтому он отбрасывает любые изменения, которые вы могли сделать.

Наилучший вариант, скорее всего, использовать панель обновления, как было рекомендовано. Другой вариант, если вам действительно нужно сделать это на стороне клиента, это использовать простой старый <select>вместо a <asp:ListBox>и сохранить список элементов в скрытом поле. Когда страница отображается на клиенте, вы можете заполнить ее, разделив содержимое текстового поля.

Затем, когда вы будете готовы опубликовать его, вы заполняете содержимое скрытого поля из вашего измененного <select>. Затем, конечно, вы должны снова разделить это на сервере и что-то сделать со своими элементами, так как ваш выбор пуст, теперь, когда он вернулся на сервер.

В общем, это довольно громоздкое решение, которое я бы не рекомендовал, но если вам действительно нужно вносить изменения в listBox на стороне клиента, оно работает. Однако, я бы порекомендовал вам заглянуть в панель обновления, прежде чем идти по этому пути.

Энди С.
источник
3
c, вам не нужно хранить выбранные элементы в скрытом поле, если вы сделаете поле выбора runat = "server", вы можете прочитать переданное обратно значение из Request.Form [ selectid .UnqiueID]. И если выбрано несколько, браузер публикует значения в формате CSV. Обратите внимание, что элементы и свойства selectedindex элемента управления будут неправильными на сервере, поскольку вы изменили список itrmlist на клиенте, о котором сервер не знает.
Майкл
Майкл, это сработало. до тех пор, пока вы добавляете «несколько = истина», иначе это даст вам только 1 значение. Спасибо
Самир Алибхай
1
Была такая же проблема для выпадающего списка с символами новой строки. Переключение на выбор работал отлично. Спасибо!
thchaver
Я использовал старый добрый <select>, который решил проблему. Подскажите, пожалуйста, почему Updatepanel тратит много времени на загрузку данных по сравнению с загрузкой данных ajax на стороне клиента.?
Пранеш Джанартанан
17

У меня была такая же проблема с Repeater, потому что у меня была веб-страница с элементом управления Repeater на веб-сайте, на котором была включена функция EnableEventValidation. Это было не хорошо. Я получаю недопустимые исключения, связанные с обратной передачей.

То, что работало для меня, было установить EnableViewState = "false" для повторителя. Преимущества заключаются в том, что его проще использовать, так же как и отключение проверки события для веб-сайта или веб-страницы, но область действия намного меньше, чем отключение проверки события для обоих.

Умар Фарук Хаваджа
источник
3
У меня была именно эта проблема с устаревшим веб-контролем. Наша веб-платформа / CMS (sitecore) получила большое обновление, которое включило проверку событий (ранее она была отключена! Ой!). Элемент управления повторителя отображал изображения в веб-галерее (с кнопками для их изменения), и при обратной передаче этих кнопок происходило исключение. Я отключил состояние просмотра на повторителях, используя EnableViewState = "false", как вы предложили, и эй до того, как это сработало. Как обнаружили другие, переопределение Render () и использование ClientScriptManager.RegisterForEventValidation () у меня не сработало. СПАСИБО!
Ксан
Как и @xan, я также использую Sitecore, и это именно то, что мне нужно.
wilsjd
Это сработало и для меня. Панель обновления AJAX работала бы также хорошо, но она была раздутой, что мне не нужно в этом случае, так что спасибо Умар Фарук Хаваджа.
Брайан
17

Ничто из вышеперечисленного не помогло мне. После дальнейших раскопок я понял, что пропустил 2 формы, примененные на странице, которая вызывала проблему.

<body>
<form id="form1" runat="server">
<div>
        <form action="#" method="post" class="form" role="form">
        <div>
        ...
        <asp:Button ID="submitButton" runat="server"
        </div>
</div>
</body>

Имейте в виду, что недавно ASP.NET начал рассматривать iframes внутри тега формы, который содержит тег формы в самом документе iframe как вложенный фрейм. Мне пришлось переместить iframe из тега формы, чтобы избежать этой ошибки.

бигглов
источник
12

У меня была такая же проблема при изменении ListBox с помощью JavaScript на клиенте. Это происходит, когда вы добавляете новые элементы в ListBox от клиента, которых не было при визуализации страницы.

Исправление, которое я нашел, состоит в том, чтобы информировать систему проверки событий обо всех возможных допустимых элементах, которые можно добавить с клиента. Вы делаете это путем переопределения Page.Render и вызова Page.ClientScript.RegisterForEventValidation для каждого значения, которое ваш JavaScript может добавить в список:

protected override void Render(HtmlTextWriter writer)
{
    foreach (string val in allPossibleListBoxValues)
    {
        Page.ClientScript.RegisterForEventValidation(myListBox.UniqueID, val);
    }
    base.Render(writer);
}

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

protected override void Render(HtmlTextWriter writer)
{
    foreach (ListItem i in listBoxAll.Items)
    {
        Page.ClientScript.RegisterForEventValidation(listBoxSelected.UniqueID, i.Value);
    }
    base.Render(writer);
}
Джош
источник
9

Еще один способ, не упомянутый здесь, это создать подкласс ListBox

То есть.

public class ListBoxNoEventValidation : ListBox 
{
}

ClientEventValidation отключает атрибут System.Web.UI.SupportsEventValidation, если вы создаете его подкласс, если вы не добавите его явно, он никогда не вызовет процедуру проверки. Это работает с любым элементом управления, и я нашел единственный способ «отключить» его для элемента управления на основе элемента управления (т. Е. Не на уровне страницы).

Майк С.
источник
2
Хорошо описано здесь .
Павел Ходек
1
Я думаю, что лучший способ решить эту проблему - это сделать. Мы должны исправить это на уровне элемента управления, а не на уровне страницы, и рисковать безопасностью всех элементов управления +1, и спасибо за @PavelHodek за эту ссылку.
Джеймс Пулозе
К сожалению, кажется, что если вы сделаете это, любые элементы списка, добавленные на клиенте, не будут распознаны, если они будут выбраны при повторной публикации страницы.
Джонатан Вуд
9

вы пытаетесь что-то подобное на своей странице .aspx

Добавить

EnableEventValidation = "ложь"

Вы можете задать любой вопрос!

user3690871
источник
Я бы поспорил, если бы в этом случае наиболее подходящим решением было бы отключить встроенное предложение проверки с помощью инфраструктуры, чтобы перестать видеть ошибку.
Jviaches
8

Если вы заполняете DropdownList через скрипт на стороне клиента, то очистите список, прежде чем отправить форму обратно на сервер; тогда ASP.NET не будет жаловаться, и безопасность будет все еще включена.

И чтобы получить данные, выбранные из DDL, вы можете прикрепить событие «OnChange» к DDL, чтобы собрать значение в скрытом вводе или в текстовом поле со стилем = «display: none;»

MyEname
источник
+1 Легко реализовать. Может быть не самый чистый, но достаточно легкий.
Nutsch
7

3: я изменил свой тип кнопки в столбце сетки с «PushButton» на «LinkButton». Это сработало! ("ButtonType =" LinkButton ") Я думаю, если вы можете изменить свою кнопку на другие элементы управления, такие как" LinkButton "в других случаях, она будет работать правильно.

Хотел бы я проголосовать за тебя, Амир (увы, мой представитель слишком низкий.) У меня просто была эта проблема, и изменение ее работало как чемпион в моем сетке. Немного в стороне, я думаю, правильный код: ButtonType = "Link"

Я подозреваю, что это потому, что когда вы нажимаете «изменить», ваши изменения изменяются на «обновить» и «отменить», которые затем возвращаются к «редактировать» при отправке. И эти переменные элементы управления делают .net неудобным.

Брайан Уэлч
источник
Суть этой проблемы заключается в модели проверки событий asp.net и в том, что клиент изменяет «страницу» в тот момент, когда вы делаете пост обратно. Что ты имеешь в виду "..... И эти переменные элементы управления делают .net непростым" ??
Юлий А
7

(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:

protected override void OnInit(EventArgs e) {
  foreach (GridViewRow grdRw in gvEvent.Rows) {

  Button deleteButton = (Button)grdRw.Cells[2].Controls[1];

  deleteButton.ID = "btnDelete_" + grdRw.RowIndex.ToString();           
  }
}

Оригинальная статья:

http://www.c-sharpcorner.com/Forums/Thread/35301/

Йили
источник
6

Я реализовал вложенный вид сетки и столкнулся с той же проблемой. Я использовал LinkButton вместо кнопки изображения, например:

прежде чем у меня была такая колонка:

<asp:TemplateField ItemStyle-Width="9">
  <ItemTemplate>
 <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand"
                        runat="server" />
  </ItemTemplate>
</asp:TemplateField>

Я заменил, как это.

<asp:TemplateField>
<ItemTemplate>
     <asp:LinkButton  CommandName="Expand" ID="lnkBtn"  runat="server" ><asp:Image  ID="Img"  runat="server" ImageUrl="~/Images/app/plus.gif" /></asp:LinkButton>
      </ItemTemplate>
</asp:TemplateField> 
Swathi
источник
5

У меня была похожая проблема, но я не использовал ASP.Net 1.1 и не обновлял элемент управления через javascript. Моя проблема возникла только в Firefox, а не в IE (!).

Я добавил параметры в DropDownList для события PreRender, например:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string[] opcoes = HF.value.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

В моем "HF" (скрытое поле) параметры были разделены новой строкой, например:

HF.value = "option 1\n\roption 2\n\roption 3";

Проблема заключалась в том, что HTML-страница была разбита (я имею в виду новые строки) в параметрах «select», представляющих DropDown.

Поэтому я решил свою проблему, добавив одну строку:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string dados = HF.Value.Replace("\r", "");
string[] opcoes = dados.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

Надеюсь, это поможет кому-то.

памело
источник
4

если вы измените UseSubmitBehavior="True" к UseSubmitBehavior="False"вашей проблемы будет решена

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />
Али Джуди
источник
Это не сработало для меня. Я использую кнопку image, хотя и в таблице в репитере, так что это не совсем та же самая ситуация. Отключение состояния повторителя работало для меня.
Брайан
3

У меня была та же проблема, что и я:

Просто добавил условие if(!IsPostBack)и все работает отлично :)

Niket
источник
3

Эта ошибка будет отображаться без обратной передачи

Добавить код:

If(!IsPostBack){

 //do something

}
Balaji Selvarajan
источник
2

В этом случае добавьте идентификатор к кнопке в RowDataBound сетки. Это решит вашу проблему.

Nilesh
источник
2

Простым решением этой проблемы является использование проверки IsPostBack при загрузке вашей страницы. Это решит эту проблему.

user249527
источник
2

Ajax UpdatePanel делает это, и я думаю, что это самый простой способ, игнорируя издержки обратной передачи Ajax .

netseng
источник
2

Я знаю, что это супер-старый пост. Предполагая, что вы звоните в свое приложение, вот идея, которая работает для меня:

  1. Реализуйте ICallbackEventHandler на своей странице
  2. Вызовите ClientScriptManager.GetCallbackEventReference для вызова кода на стороне сервера
  3. Как говорится в сообщении об ошибке, вы можете вызвать ClientScriptManager.RegisterForEventValidation

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

tmck2
источник
2

Мы столкнулись с этой же проблемой, когда преобразовывали наши обычные страницы ASPX в страницы контента.

Страница с этой проблемой имела </form>тег в одном из разделов контента, таким образом, два конечных тега формы отображались во время выполнения, что вызвало эту проблему. Удаление дополнительного тега конца формы со страницы решило эту проблему.

Tushar
источник
Спасибо, оказывается, у меня были дополнительные <form>поля в коде.
Эрик Кигати
2

Если вы используете gridview и не привязываете gridview при загрузке страницы внутри! Ispostback, то эта ошибка возникает, когда вы нажимаете на edit и удаляете строку в gridview.

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }
Ахил Сингх
источник
1

Четыре минуты назад я получил ту же ошибку. Тогда я исследовал в течение получаса, как ты. На всех форумах они обычно говорят «добавить страницу enableEvent .. = false или true». Любое предложенное решение не решило мои проблемы, пока я не нашел его. К сожалению, проблема в кнопке ASP.NET. Я удалил это две секунды назад. Я попытался заменить на кнопку «imagebutton», но это также было неприемлемо (потому что оно выдало ту же ошибку).

Наконец я заменил на LinkButton. Кажется, это работает!

CEM
источник
1

Я использовал Datalist, и я получил ту же ошибку для моей кнопки. Я просто использую IsPostBack, чтобы проверить и заполнить свои элементы управления, и проблема решена! Большой!!!

Razia
источник
1

Для меня сработало перемещение следующего кода из page_load в page_prerender:

lstMain.DataBind();
Image img = (Image)lstMain.Items[0].FindControl("imgMain");

// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=\"" + img.ClientID + "\"</script>");
}
Мурад Додхия
источник
1

Лучший вариант - использовать скрытое поле и не отключать проверку событий, а также изменить каждый список, выпадающий список для выбора с атрибутом сервера runat.

Programista
источник
Переключение с управления asp на обычный <select id = "Director" runat = "server"> работало отлично. Мне удалось получить доступ к его значению в коде, используя: например: string DirectorId = Request.Form [Director.ID]
Бакстер
1

Если вы используете панель обновления Ajax. Добавьте <Triggers>тег и внутри него вызовите кнопку или элемент управления, вызывающий postBack с помощью<asp:PostBackTrigger .../>

devo882
источник
1

Если вы заранее знаете, какие данные могут быть заполнены, вы можете использовать ClientScriptManager для решения этой проблемы. У меня была эта проблема при динамическом заполнении выпадающего списка с использованием JavaScript при предыдущем выборе пользователя.

Вот пример кода для переопределения метода рендеринга (в VB и C #) и объявления потенциального значения для выпадающего списка ddCar.

В VB:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Dim ClientScript As ClientScriptManager = Page.ClientScript

    ClientScript.RegisterForEventValidation("ddCar", "Mercedes")

    MyBase.Render(writer)
End Sub

или небольшое изменение в C # может быть:

protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes");
    base.Render(writer);
}

Для новичков: это должно идти в коде файла (.vb или .cs) или, если используется в файле aspx, вы можете заключить в <script>теги.

Craigs
источник
1

Это было причиной, почему я получил это:

У меня был ASP: ListBox. Изначально это было скрыто. На стороне клиента я бы заполнил его через AJAX с опциями. Пользователь выбрал один вариант. Затем, нажав кнопку «Отправить», сервер рассмеялся над ListBox, так как не помнил, чтобы у него были какие-либо параметры.

Так что я сделал, чтобы убедиться, что я очистил все параметры списка перед отправкой формы на сервер. Таким образом, сервер не жаловался, так как список ушел к клиенту пустым и вернулся пустым.

Сортировка !!!

user2520440
источник