2013-12-11 5 views
4

В моем приложении AsyncPostback спускового панели обновления является не работает в IE 9 и IE 10 но работает в IE 8 и postbacktrigger также работает во всех версии IE.Update Panel AsyncPostback Trigger не работает в IE

Это отдавание ошибки

Sys.WebForms.PageRequestManagerParserErrorException: Сообщение , полученное от сервера не может быть проанализировано.

Я попробовал несколько вещь, прежде чем отправлять этот вопрос:

  • асинхронной = True в странице тега
  • регистрации постбэк на странице загрузки (это не может быть использована в качестве панели обновления в рамках всей системы)
  • позволяет асинхронной в веб-конфигурации

<asp:UpdatePanel runat="server"> 
            <ContentTemplate> 
             <cc:BinNumberMultiDropDown runat="server" TabIndex="3" ProgramTrue="true" ID="ddl_bin_number" 
              CssClass="multiselect"> 
             </cc:BinNumberMultiDropDown> 
             <asp:RequiredFieldValidator ID="rfv_ddl_bin_number" runat="server" ControlToValidate="ddl_bin_number" ValidationGroup="vg_rate" Display="Dynamic" 
              SetFocusOnError="true"></asp:RequiredFieldValidator> 
            </ContentTemplate> 
            <Triggers> 
             <asp:AsyncPostBackTrigger ControlID="ddl_program" EventName="SelectedIndexChanged" /> 
            </Triggers> 
           </asp:UpdatePanel> 

Пожалуйста, предложите мне с решением

Я также обнаружил, что эта ошибка появляется только в Winodws 8 Системы

+0

можете ли вы разместить свой образец кода? – SpiderCode

+2

Я ненавижу IE всегда !!! –

+0

@SpiderCode Я добавил код –

ответ

0

Я думаю, что вы используете .NET Framework 4.0, есть некоторые вопросы в рамках 4.0 с Windows 8, если это возможно, вы можете попробовать с конвертированием вам приложения в рамках 4.5.

0
<asp:UpdatePanel ID="MainContainerUpdatePanel" ChildrenAsTriggers="false" UpdateMode="Conditional" runat="server"> 
+0

Я уже пробовал это, но он не работает –

+0

проверить новый ответ –

+0

это не работает –

1

Убедитесь, что ваши файлы определения браузера обновляются на сервере, представляют собой ряд проблем, связанных с обработкой обратной почты javascript, которые вызваны .Net некорректным обнаружением новых версий IE. Есть целый ряд исправлений исправлений для обновления файлов, см блог Скотта Hanselmann для получения более подробной информации:

http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx

и

http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedjavascriptErrorOrMaintainFF5ScrollbarPosition.asp

0

Ну попробуйте out this ссылка. Он описал аналогичную ошибку, с которой вы столкнулись

0
protected void Page_Load(object sender, EventArgs e) { 
    ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); 
    scriptManager.RegisterPostBackControl(btn.Your-BUTTON-HERE'); 
    //Further code goes here.... 
} 

Положите это, и оно будет работать, или если у вас есть несколько панелей обновлений? сообщите нам

+0

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

1

Я столкнулся с той же проблемой. Я проанализировал причину & найти много хорошего сообщения о причине проблемы & как ее решить. Один из них находится на Eilon Lipton's blog:

Почему я держать получать PageRequestManagerParserErrorException?

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

1. вызовы к Response.Write():

Позвонив Response.Write() непосредственно вы обходя нормальный механизм рендеринга ASP. NET. Биты, которые вы пишете, идут прямо к клиенту без дальнейшей обработки (ну, в основном ...). Это означает, что UpdatePanel не может кодировать данные в специальном формате .

2.Response фильтры:

похожих на Response.Write(), фильтры ответа могут изменить визуализации таким образом, что UpdatePanel не будет знать.

3.HttpModules: Опять же та же сделка, что и Response.Write(), и фильтры отклика.

4. Трассировка сервера включена: Если бы я снова собирался реализовать трассировку, я бы сделал это по-другому. Trace эффективно выписывается с использованием Response.Write(), и как таковой испортит специальный формат, который мы использовали для UpdatePanel.

5. Звонки на сервер.Transfer(): К сожалению, нет способа обнаружить, что был вызван Server.Transfer(). Это означает, что UpdatePanel не может ничего сделать, если кто-то звонит Server.Transfer(). Ответ, отправленный обратно клиенту, - это HTML-код со страницы, на которую вы перешли. С его HTML, а не особый формат, он не может быть проанализирован, и вы получите ошибку. Как сделать Я не получаю PageRequestManagerParserErrorException?

Для начала не делайте ничего из предыдущего списка! Вот список совпадений, как избежать данной ошибки (если это возможно):

вызовов к Response.Write(): Разместить <asp:Label> или аналогичный контроль на вашей странице и установите его свойство Text. Дополнительным преимуществом является , что ваши страницы будут действительными HTML. При использовании Response.Write() вы обычно попадают на страницы, содержащие недопустимую разметку.

Фильтры отклика: Исправить может быть просто не использовать фильтр. В любом случае они не используются очень часто. Если возможно, фильтруйте объекты на уровне управления , а не на уровне ответа.

HttpModules: Такие же, как фильтры отклика.

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

Звонки на сервер.Transfer(): Я не совсем уверен, почему люди используют Server.Transfer(). Возможно, это устаревшая вещь от классического ASP. Я бы предложил использовать Response.Redirect() с параметрами запроса или путем межстраничной проводки.

Другой способ:, чтобы избежать ошибки синтаксического анализа, заключается в том, чтобы сделать обычную обратную передачу вместо asynchronous postback. Например, если у вас есть кнопка , которая обязательно должна сделать Server.Transfer(), сделайте это обычным почтовым отправлением. Существует несколько способов сделать это:

  • Самый простой способ просто разместить кнопку вне любого UpdatePanels. К сожалению, макет вашей страницы может не разрешить для этого .
  • Добавить PostBackTrigger в ваш UpdatePanel, который указывает на кнопку. Это отлично работает, если кнопка объявлена ​​статически через разметку на странице.
  • Позвоните по номеру ScriptManager.RegisterPostBackControl() и отправьте соответствующую кнопку. Это лучшее решение для элементов управления, которые добавляются динамически, например, внутри повторяющегося шаблона.