Можно ли использовать __doPostBack()
или это не рекомендуется, поскольку оно создано из ASP.Net, и мы не уверены, изменили ли его в следующей версии ASP.Net.
Можно ли использовать __doPostBack()?
Ответы (5)
Я бы посоветовал против этого, так как это внутренние вещи ASP.NET
и никогда не предназначались для прямого использования.
Вместо этого, когда мне нужно «вручную» запустить PostBack, я добавляю скрытую кнопку «на стороне сервера» с правильным OnClick:
<asp:Button id="btnDummy" runat="server" OnClick="Foo" style="display: none;" />
Тогда JS:
document.getElementById("<%=btnDummy.ClientID%>").click();
Таким образом, мне все равно, как происходит обратная отправка, я просто запускаю естественный поток событий.
Вы не должны вызывать его напрямую. Вы должны сгенерировать вызов javascript, используя функции в Page.ClientScript
, такие как:
Это гарантирует, что он всегда совместим.
Я думаю, что его совершенно нормально использовать напрямую, и я использовал его в обязательном порядке, в конце концов, это всего лишь функция javascript.
Они, вероятно, не изменят его, но зачем вызывать его напрямую?
Я думаю, что лучше будет инициировать событие (например, нажатие кнопки) и позволить элементу управления инициировать обратную передачу.
Если вам нужно инициировать обратную передачу напрямую, рекомендуется использовать описанные десять функций Page.ClientScript.
Мы используем его повсеместно, и я не могу представить, что его когда-нибудь уберут из ASP.NET. Я думаю, что метод поддельной/скрытой кнопки такой же, если не хуже. Если вы используете подход с поддельной кнопкой, у вас не будет возможности передать __EVENTARGUMENT. Мне нравится использовать __EVENTARGUMENT для передачи моих данных на сервер лучше, чем создавать скрытые поля, потому что хакеру будет сложнее скомпрометировать, чем просто отправить какое-то скрытое поле на мою страницу. Мне также не нравится идея создания полей и элементов управления на странице, если они даже не будут отображаться. Я уверен, что подход с поддельными кнопками, вероятно, легче понять начинающему программисту. При этом я ищу более элегантный способ приблизиться к этому, но все же обнаруживаю, что звоню
__doPostBack('%=UpdatePanel.ClientID%>','MyData')
в некоторых случаях.