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

205

Я получаю следующую ошибку при отправке страницы с клиентской стороны. У меня есть 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
  • 0
    Не выполняйте привязку данных в событии page_load.
Теги:
.net-2.0
postback
argumentexception

37 ответов

156
Лучший ответ

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

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

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

  • 0
    Еще один вариант: реализовать IPostBackEventHandler и вызвать js __doPostBack ('<% = UniqueId.ToString ()%>', arg)
  • 0
    Основываясь на приведенных выше предложениях, я поместил свои выпадающие списки в обычную ASP.NET asp: UpdatePanel, загрузил выпадающие списки в коде и затем upNewRecord.Update ();
Показать ещё 1 комментарий
156

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

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

Эта ошибка возникает, когда вы нажимаете на свою команду и снова запускается страница_load, в нормальном жизненном цикле будет Page_Load → Нажмите Command → Page_Load (снова) → Событие ItemCommand процесса

  • 7
    ага! Спасибо большое, это был трюк в моем случае! Я перезагрузил выпадающий список в загрузке страницы, и поэтому фреймворк потерял контроль над элементами (новыми) в ddl и тем, который я щелкнул (которого больше не было)
  • 0
    У меня была та же ошибка, что и у OP ... Я использовал мастер в своей форме и вызывал шаг 0 при загрузке страницы. убрал это и проблема исчезла. Спасибо...
Показать ещё 9 комментариев
28

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

"Недопустимый аргумент обратной передачи или обратного вызова. Проверка событий активируется с использованием в конфигурации или     <% @Страница 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 снова подводит меня
  • 2
    Кнопка Link работала для меня тоже
Показать ещё 6 комментариев
26

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

Существуют две основные проблемы с добавлением элементов на клиентскую сторону asp: listbox.

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

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

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

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

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

  • 3
    c, вам не нужно хранить выбранные элементы в скрытом поле, если вы сделаете поле выбора runat = "server", вы можете прочитать переданное обратно значение из Request.Form [ selectid .UnqiueID]. И если выбрано несколько, браузер публикует значения в формате CSV. Обратите внимание, что элементы и свойства selectedindex элемента управления будут неправильными на сервере, поскольку вы изменили список itrmlist на клиенте, о котором сервер не знает.
  • 0
    Майкл, это сработало. до тех пор, пока вы добавляете «несколько = истина», иначе это даст вам только 1 значение. Спасибо
Показать ещё 2 комментария
15

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

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

  • 3
    У меня была именно эта проблема с устаревшим веб-контролем. Наша веб-платформа / CMS (sitecore) получила большое обновление, которое включило проверку событий (ранее она была отключена! Ой!). Элемент управления повторителя отображал изображения в веб-галерее (с кнопками для их изменения), и при обратной передаче этих кнопок происходило исключение. Я отключил состояние просмотра на повторителях, используя EnableViewState = "false", как вы предложили, и эй до того, как это сработало. Как обнаружили другие, переопределение Render () и использование ClientScriptManager.RegisterForEventValidation () у меня не сработало. БЛАГОДАРЮ ВАС!
  • 0
    Как и @xan, я также использую Sitecore, и это именно то, что мне нужно.
Показать ещё 2 комментария
11

Ничто из этого не помогло мне. После более глубокого рытья я понял, что упустил 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 из тега формы, чтобы избежать этой ошибки.

9

У меня была такая же проблема при изменении 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, когда пользователь нажимает кнопку. В этом случае вам просто нужно перебирать элементы в первом списке ListBoxand, каждый из которых имеет второй список:

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 
{
}

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

  • 0
    Спасибо, это была работа вокруг, которую я искал.
  • 2
    Хорошо описано здесь .
Показать ещё 2 комментария
6

(1) EnableEventValidation = "false"... Это не работает для меня.

(2) ClientScript.RegisterForEventValidation.... Это не работает для меня.

Решение 1:

Сменить кнопку /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/

5

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

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

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

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

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

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

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

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

добавить

EnableEventValidation = "ложь"

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

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

Я реализовал представление вложенной сетки, и я столкнулся с той же проблемой. Я использовал 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> 
3

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

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

3

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

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

У меня была аналогичная проблема, но я не использовал 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);

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

2

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

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

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

2

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

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

  • 0
    Спасибо, оказывается, у меня были дополнительные поля <form> в моем коде.
2

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

1

Как сказал Nick B, и это сработало для меня, в некоторых случаях вам нужно удалить разрывы строк. Взгляните на код:

-Продолжительный путь:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">
            Item 1</asp:ListItem>
    <asp:ListItem>
            Item 2</asp:ListItem>
    <asp:ListItem>
            Item 3</asp:ListItem>
</asp:DropDownList>

-Right way:

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Selected="True">Item 1</asp:ListItem>
    <asp:ListItem>Item 2</asp:ListItem>
    <asp:ListItem>Item 3</asp:ListItem>
</asp:DropDownList>

Это только для меня в IE10 +

1

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

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

If(!IsPostBack){

 //do something

}
1

Вот почему я его получал:

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

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

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

1

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

Вот пример кода для переопределения метода рендеринга (в VB и С#) и объявления потенциального значения для выпадающего списка 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

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

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

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

1

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

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

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

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

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

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

1

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

1

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

0

В следующем примере показано, как проверить значение свойства IsPostBack при загрузке страницы, чтобы определить, отображается ли страница в первый раз или отвечает на обратную передачу. Если страница отображается в первый раз, код вызывает метод Page.Validate. Разметка страницы (не показана) содержит элементы RequiredFieldValidator, которые отображают звездочки, если запись не требуется для требуемого поля ввода. Вызов Page.Validate приводит к тому, что звездочки будут отображаться сразу же, когда страница отображается, вместо ожидания, пока пользователь не нажмет кнопку "Отправить". После обратной передачи вам не нужно вызывать Page.Validate, потому что этот метод называется частью жизненного цикла страницы.

 private void Page_Load()
    {
        if (!IsPostBack)
        {      
        }
    }
0

После этой проблемы на удаленных серверах (production, test, qa, staging и т.д.), но не на локальных рабочих станциях разработки, я обнаружил, что пул приложений был настроен с RequestLimit, отличным от 0.

Это заставило пул приложений отказаться и ответить с исключением, отмеченным в вопросе.

0

FYI У меня была такая же проблема с этим сообщением об ошибке, и было то, что у меня было 2 тега формы на одной странице. Был один на главной странице и один на самой странице. Вскоре, когда я удалил пару тегов второй формы, проблема исчезла.

0

У меня была та же проблема, два списка и две кнопки.

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

Я получил недопустимую обратную передачу.

выясняется, что данные были связаны с каналами возврата каретки, которые вы не видите, когда они отображаются в списке.

работал отлично в каждом браузере, кроме IE 10 и IE 11.

Извлеките каналы линии возврата каретки, и все работает нормально.

0

Проверьте данные привязанных элементов управления. Некоторые недопустимые данные повреждают ValidateEvent.

0

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

  • 0
    супер чувак это работает нормально спасибо
0

Когда я добавил id в ItemDataBound, он не дал мне ошибку, но это не давало мне имени команды. Он возвращал имя команды пустым. Затем я добавил имя команды, а ItemDataBound. Затем он решил ту же проблему. Спасибо Нилешу, большое предложение. Он работал:)

0

Я работал над этой точной ошибкой, не добавляя ListBox в родительскую сборку Page/Control Controls. Потому что я действительно не нуждался в каких-либо функциональных возможностях на стороне сервера. Я просто хотел использовать его для вывода HTML для настраиваемого серверного элемента управления, который я сам сделал в обработчике событий OnRender. Я надеялся, что использование элемента управления спасет меня от записи в ответ моего собственного html.

Это решение, скорее всего, не сработает для большинства, но не позволяет ASP.NET выполнять проверку ValidateEvent против элемента управления, потому что элемент управления не сохраняет в памяти между postbacks.

Кроме того, моя ошибка была вызвана тем, что выбранный элемент списка был элементом, который не был в списке, в предыдущей обратной передаче. Incase, который помогает любому.

  • 0
    это хорошо. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню