Принуждение ASP.NET WebForms к отображению скриптов __doPostback () - PullRequest
1 голос
/ 30 июля 2010

Одна из наших страниц ASP.NET WebForms 3.5 просто неожиданно решила не отображать метод javascript __doPostBack() вместе с поддерживающими полями <hidden>.

Все остальное выглядит нормально на странице - единственное, что я изменил, это то, что я удалил обработчик обратной передачи на SelectList элементе управления и изменил AutoPostback с True на False на том же элементе управления. На странице все еще есть несколько других (неизменных) элементов, которые имеют обработчики обратной передачи.

Я также использую проверку jQuery на странице, но раньше она работала как чудо, и я ничего не изменил в javascripts. И да, я видел этот вопрос , но это решение не относится ко мне - мы сейчас вообще не используем никакого кэширования.

UPDATE:
Кажется, что ASP.NET решает, что мои клиентские скрипты не нужны, так как никакие элементы управления не зависят от обратной передачи . Тем не менее, у меня есть кнопка управления для отправки, которая имеет обработчик событий на стороне сервера, и этот обработчик событий никогда не вызывается - я подозреваю, что это потому, что кнопка может быть просто <input type="submit"> и отправлять форму в стандартными способами HTTP вместо сценария ASP.NET __doPostBack.

Это мой элемент управления (видимое значение установлено на True в коде позади):

<asp:Button ID="SaveNewButton" runat="server" CssClass="inputbutton"
    Visible="false" OnClick="SaveNewButton_Click" />

И это метод-обработчик в коде:

Protected Sub SaveNewButton_Click(ByVal sender As Object,
    ByVal e As System.EventArgs) Handles SaveNewButton.Click

Как заставить ASP.NET отображать клиентские сценарии для обратных передач, чтобы вызывался мой обработчик событий?

Ответы [ 4 ]

2 голосов
/ 30 июля 2010

IIRC, ASP.NET отображает javascript __doPostback () только тогда, когда считает, что это необходимо, то есть если на странице есть элементы управления, которые должны инициировать обратную передачу, в то время как элементы управления HTML, которые они отображают, изначально не делают этого.Кнопка может инициировать обратную передачу через обычную отправку без сценария, поэтому ваш раскрывающийся список мог быть единственным элементом управления, требующим обратной передачи по сценарию.Когда вы изменили его свойство autopostback на false, вы, вероятно, устранили необходимость в __doPostback, поэтому ASP.NET больше его не отображает.

1 голос
/ 24 июля 2015

Если вы обнаружите это через Google, проблема заключается в том, что __doPostBack включается только при необходимости. Если у вас нет элементов управления, которые заставляют ASP.NET автоматически включать сценарий, вы можете позвонить

        page.ClientScript.GetPostBackEventReference(New Web.UI.PostBackOptions(Me.page))

И ASP.NET будет включать сценарии обратной передачи. Простой.

Вы можете сделать это в PreRender обработчике событий.

REF http://forums.asp.net/t/1584561.aspx?Forcing+ASP+NET+to+render+__doPostBack+scripts

1 голос
/ 11 августа 2010

Проблема заключалась в том, что, как отметили tdammers, ASP.NET отображает javascript __doPostback() только тогда, когда считает, что это необходимо, и в этом случае он так не думал.Решение было дано мне в ветке на forums.asp.net и было таким простым:

Set UseSubmitBehavior = "False" на кнопкеследует отправить с __doPostBack() и не использовать поведение отправки по умолчанию в браузере.

0 голосов
/ 30 июля 2010

Ваш тег все еще имеет атрибут runat = "server"?

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