Недійсний аргумент після зворотного зв'язку або зворотного дзвінка. Перевірка подій увімкнена за допомогою <<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. (Помістіть список списку в панель оновлення та запустіть оновлення, якщо ви додасте або видалить список. Таким чином, перегляд стану та відповідні поля отримають оновлення та перевірка подій пройде.)
  • Забудьте на стороні клієнта і використовуйте класичний поштовий режим і додайте або видаліть список серверів на сервері.

Я сподіваюся, що це допомагає.


Ще один варіант: реалізувати 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 -> Клацніть на команді -> Page_Load (знову) -> Process ItemCommand Event


7
Дякую дуже, це був трюк у моєму випадку! Я перезавантажив спадне меню у завантаженні сторінки, і тому фреймворк втратив контроль над елементами (новими) у ddl, і той, на який я натиснув (якого вже не існувало)
Michel

У мене була така ж помилка, що і в ОП ... Я використовував майстра у своїй формі, і я викликав 0 крок у завантаженні сторінки. зняли це, і проблема зникла. Дякую ...
tking

Велике спасибі за цю відповідь .... У мене була та сама проблема, і виявилося, що я просто забув ігнорувати поштові розсилки під час завантаження даних у свою сітку ... заощади мені багато часу
Quagmire

10
Да! Повернення до веб-форм із MVC - це біль. Це правильна відповідь
Vishnoo Rath

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
Моє рішення полягало в тому, щоб відмовитися від кнопок гніздування в сетці даних. РС мені ще не вдається.
Jacobs Data Solutions

Ваше рішення працює і для мене. Дякую. Але я хочу знати, що чому Buttonне працює, коли linkButtonпрацює за тією ж програмою. Якщо так, чи потрібно нам завжди користуватися linkButton? Як ми могли зробити більш гнучкими?
Френк Мят Четвер

8
Спробуйте додати до кнопки UseSubmitBehavior = "False" stackoverflow.com/questions/2968525 / ...
JJschk

Awesomeeeeeee :) .. Ви можете дізнатися це лише досвідом .. Ви довели справжнє шоу scenerio tat Досвід - найкращий вчитель .. Чудовий анс та пояснення!
saun4frsh

У заміні для Render ВАМ ПОВИНЕН ПОЗИМАТИ базу. Render (сценарій); наприкінці ... інакше це не вийде!
Пол Захра

28

Ви дійсно хочете зробити 2 або 3, не вимикайте перевірку подій.

Є дві основні проблеми з додаванням елементів на стороні клієнта asp: listbox.

  • Перший полягає в тому, що він заважає валідації подій. Те, що повернулося на сервер, - це не те, що він послав.

  • Друга полягає в тому, що навіть якщо ви відключите перевірку подій, коли ваша сторінка буде опублікована назад, елементи в списку списку будуть перебудовані з поля перегляду, тому будь-які зміни, внесені на клієнті, втрачаються. Причиною цього є те, що asp.net не очікує, що вміст списку списків буде змінено на клієнті, він очікує лише вибору, тому він відкидає будь-які зміни, які ви могли внести.

Найкращим варіантом, швидше за все, є використання панелі оновлення, як було рекомендовано. Ще одним варіантом, якщо вам дійсно потрібно зробити це клієнтом, є використання простого старого <select>замість <asp:ListBox>, а також збереження списку елементів у прихованому полі. Коли сторінка відображається на клієнті, ви можете заповнити її з розбиття вмісту вашого текстового поля.

Потім, коли ви готові опублікувати його, ви перенаселяєте вміст прихованого поля зі зміненого <select>. Тоді, звичайно, вам доведеться знову розділити це на сервері і зробити щось із вашими предметами, оскільки ваш вибір порожній тепер, коли він знову на сервері.

Загалом, це дуже громіздке рішення, яке я б не дуже рекомендував, але якщо вам дійсно доведеться робити клієнтські модифікації listBox, це дійсно працює. Однак я б дуже рекомендував заглянути в updatePanel перед тим, як пройти цей маршрут.


3
с, що вам не потрібно , щоб зберегти вибрані елементи в прихованому полі, якщо ви зробите виберіть поле Runat = «сервер» ви можете прочитати надіслане значення тому від Request.Form [ selectid .UnqiueID]. І якщо вибрано кілька, браузер розміщує ці значення як csv. Зауважте, що елементи та вибрані властивості елемента керування будуть неправильними на сервері, оскільки ви змінили список itrm на клієнті, про який сервер не знає.
Майкл

Майкл, це спрацювало. доки ви додасте "multiple = true", інакше це дасть вам лише 1 значення. Спасибі
Самер Алібхай

1
Був такий самий випуск для випадаючого списку з символами нового рядка. Зміна на вибір працювала ідеально. Дякую!
понеділок

Я використовував звичайний старий <select>, який вирішив питання. Скажіть, будь ласка, чому Updatepanel займає багато часу для завантаження даних у порівнянні з завантаженням даних ajax на стороні клієнта.?
Pranesh Janarthanan

17

У мене була така ж проблема з ретранслятором, тому що у мене була веб-сторінка з контролем повторювача на веб-сайті, на якому було включено EnableEventValidation. Це було не добре. Я отримував недійсні винятки, пов’язані зі зворотним зв’язком.

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


3
У мене була така точна проблема із застарілим веб-контролем. Наша веб-платформа / CMS (sitecore) отримала велике оновлення, яке ввімкнуло перевірку подій (раніше вона була вимкнена! О!). Контроль ретранслятора відображав зображення у веб-галереї (за допомогою кнопок, щоб їх переставити), і після зворотного зв'язку цих кнопок відбудеться виключення. Я відключив стан перегляду на ретрансляторах, використовуючи EnableViewState = "false", як ви запропонували, і так, перш ніж це працювало. Як виявили інші, переосмислення Render () та використання ClientScriptManager.RegisterForEventValidation () не працювали для мене. СПАСИБІ!
xan

Як і @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);
}

Це може бути болем, якщо у вас є велика кількість потенційно допустимих значень для списку. У моєму випадку я переміщував елементи між двома ListBoxes - одним, у якому є всі можливі значення, та іншим, який спочатку порожній, але заповнюється підмножиною значень із першого в 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, якщо ви підкласифікуєте його, якщо ви явно не додасте його назад, він ніколи не викличе процедуру перевірки. Це працює з будь-яким елементом управління, і це єдиний спосіб, який я виявив "відключити" його на контролі за допомогою контролю (тобто, не на рівні сторінки).



1
Я думаю, що найкращий спосіб вирішити це - це зробити. Ми повинні виправляти це на рівні контролю, а не на рівні сторінки та ризикувати безпекою усіх елементів управління +1 та дякуємо @PavelHodek за це посилання.
James Poulose

На жаль, виявляється, що якщо ви це зробите, будь-які елементи списку, додані на клієнті, не будуть розпізнані, якщо вони будуть обрані під час опублікування сторінки.
Джонатан Вуд

9

ви спробуйте щось подібне на своїй .aspx сторінці

додати

EnableEventValidation = "помилково"

ви не соромтесь задавати будь-яке питання!


Я б заперечував, якщо вимкнути пропозицію перевірки вбудованої системи рамкою, щоб перестати бачити помилку, було б найбільш підходящим рішенням у цьому випадку.
Jviaches

8

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

І щоб отримати дані, вибрані з DDL, ви можете приєднати подію "OnChange" до DDL, щоб зібрати значення у прихованому вході або у текстовому полі зі Style = "display: none;"


+1 Легко здійснити. Може бути не найчистішим, але досить простим.
горіх

7

3: Я змінив тип кнопки в стовпці сітки з "PushButton" на "LinkButton". Це спрацювало! ("ButtonType =" LinkButton ") Я думаю, що якщо ви можете змінити свою кнопку на інші елементи управління, наприклад" LinkButton ", в інших випадках вона буде працювати належним чином.

Я б хотів, щоб я міг вас проголосувати, Амір (на жаль, моя представниця занадто низька.) Я просто мав цю проблему, і зміна цього спрацьовувала, як шампіньон на моєму сімейному перегляді. Трохи вбік, я думаю, що дійсний код: ButtonType = "Посилання"

Я підозрюю, що це відбувається тому, що, коли ви натискаєте "редагувати", ваше редагування змінюється на "оновити" та "скасувати", яке потім зміниться на "редагувати" при надсиланні. І ці перемикання управління роблять .net непростим.


Суть цієї проблеми - модель підтвердження подій asp.net і те, чи "сторінка" модифікована клієнтом у той момент, коли ви робите повідомлення назад. Що ти маєш на увазі "..... І ці елементи переключення роблять .net непростим" ??
Юлій А

7

(1) EnableEventValidation = "false" ................... Для мене це не працює.

(2) ClientScript.RegisterForEventValidation .... Це не працює для мене.

Рішення 1:

Змініть кнопку / зображення кнопки на LinkButton у GridView. Це працює. (Але мені подобається ImageButton)

Дослідження: Кнопки / ImageButton та LinkButton використовують різні методи для зворотного зв'язку

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

http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx

Рішення 2:

В OnInit () введіть такий код, щоб встановити унікальний ідентифікатор для кнопки / 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> 

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" />

Це не працювало для мене. Я використовую кнопку зображення, і в таблиці в ретрансляторі, тому це не зовсім та сама ситуація. Відключення поля перегляду ретранслятора працювало на мене.
Брайан

3

У мене була така ж проблема, що і я:

Просто додали умову, if(!IsPostBack)і вона працює чудово :)



2

У цьому випадку додайте ідентифікатор до кнопки в RowDataBound сітки. Це вирішить вашу проблему.


2

Просте рішення цієї проблеми - використовувати перевірку IsPostBack для завантаження вашої сторінки. Це вирішить цю проблему.


2

Ajax UpdatePanel робить це, і я думаю, що це найпростіший спосіб, ігноруючи накладні розсилки Ajax .


2

Я знаю, що це надстарий пост. Припускаючи, що ви телефонуєте у свою заявку, ось ідея, яка працювала для мене:

  1. Вкажіть ICallbackEventHandler на своїй сторінці
  2. Зателефонуйте ClientScriptManager.GetCallbackEventReference, щоб зателефонувати на код сервера
  3. Як зазначено в повідомленні про помилку, ви можете викликати ClientScriptManager.RegisterForEventValidation

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


2

У цьому ж питанні ми стикалися, коли перетворювали наші звичайні сторінки ASPX на сторінки контенту.

На сторінці з цим випуском був </form>тег в одному з розділів "Вміст", таким чином під час виконання було виведено два кінцеві теги форми, що спричинило цю проблему. Видалення додаткового кінцевого тегу форми зі сторінки вирішило цю проблему.


Дякую, виявляється, у мене було зайве <form> поля в коді.
Ерік Кігаті

2

Якщо ви використовуєте gridview і не пов'язуєте gridview при завантаженні сторінки всередині! Ispostback, ця помилка виникає при натисканні на редагування та видалення рядка в gridview.

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }

1

Чотири хвилини тому я отримав таку ж помилку. Потім я досліджував протягом півгодини, як ти. На всіх форумах вони, як правило, говорять "додати сторінку enableEvent .. = помилково або правдиво". Будь-яке запропоноване рішення не вирішило моїх проблем, поки я не знайшов його. На жаль, проблема є кнопкою ASP.NET. Я її зняв дві секунди тому. Я намагався замінити на "imagebutton", але це також було неприпустимо (бо воно дало ту саму помилку).

Нарешті я замінив на LinkButton. здається, працює!


1

Я використовував даталіст, і я отримував ту саму помилку для своєї кнопки. Я просто використовую IsPostBack, щоб перевірити і заповнити свої елементи управління, і проблема вирішена! Чудово !!!


1

Що для мене працювало - це переміщення наступного коду зі сторінки_навантаження на сторінку_презентатор:

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


Переміщення від керування asp до регулярного <select id = "Director" runat = "server"> спрацювало чудово. Я зміг отримати доступ до його значення в коді позаду, використовуючи: напр .: string DirectorId = Request.Form [Director.ID]
Baxter

1

Якщо ви використовуєте панель оновлення Ajax. Додати <Triggers>тег і всередині нього запустити кнопку або елемент керування, що викликає використання PostBack<asp:PostBackTrigger .../>


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>теги.


1

Це була причина, чому я отримував це:

У мене був ASP: ListBox. Спочатку це було приховано. На стороні клієнта я б заповнив його через AJAX з опціями. Користувач обрав один варіант. Потім при натисканні кнопки «Надіслати» Сервер отримає все смішність з ListBox, оскільки не пам’ятає, що він має будь-які варіанти.

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

Відсортовано !!!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.