Я столкнулся с той же проблемой. Я проанализировал причину & найти много хорошего сообщения о причине проблемы & как ее решить. Один из них находится на 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()
и отправьте соответствующую кнопку. Это лучшее решение для элементов управления, которые добавляются динамически, например, внутри повторяющегося шаблона.
можете ли вы разместить свой образец кода? – SpiderCode
Я ненавижу IE всегда !!! –
@SpiderCode Я добавил код –