Итак, я читал вопросы интервью Asp.Net в блоге Скотта Хансельмана и наткнулся на этот вопрос. Может ли кто-нибудь пролить свет на то, о чем он говорит.
Как связать свой собственный JavaScript с клиентской стороной без потери функциональности PostBack
Ответы (4)
<asp:LinkButton ID="lbEdit" CssClass="button"
OnClientClick="javascript:alert('do something')"
onclick="OnEdit" runat="server">Edit</asp:LinkButton>
Атрибут OnClientClick
означает, что вы можете добавить немного JavaScript без потери функциональности PostBack, — так я ответил в интервью.
Объясните, как работают постбэки
Постбэки — это абстракция над веб-протоколами, которые эмулируют поведение с сохранением состояния по протоколу без сохранения состояния.
, как на стороне клиента
На стороне клиента обратные передачи достигаются вызовами javascript и скрытыми полями, в которых хранится состояние всех элементов управления на странице.
и на стороне сервера.
Сторона сервера проходит через жизненный цикл событий, частью этого жизненного цикла является гидратация состояния просмотра для поддержания состояния всех элементов управления на странице и инициирование событий на основе параметров, которые были переданы в вызов __doPostBack. на стороне клиента
Как связать свой собственный JavaScript с клиентской частью, не теряя функциональности PostBack?
Зависит от того, что требуется. Самый простой способ, который работает в 99% случаев, — использовать asp:hiddenfield для связи между клиентом и сервером. Для крайних случаев вы хотите войти в Exenders и управлять состоянием просмотра/состоянием управления/состоянием клиента в javascript через API-интерфейсы MS ajax. Это довольно болезненно из-за огромной кривой обучения и множества ошибок, обычно достаточно использования скрытых полей и ручного вызова __doPostBack.
Вот как бы я ответил на этот пункт. Для получения дополнительной информации о __doPostBack быстрый поиск в Google даст вам множество результатов (для ленивых это первое обращение http://aspalliance.com/895)
Вы имеете в виду что-то вроде этого:
в вашем коде позади:
protected string GetPostBack()
{
return ClientScript.GetPostBackEventReference(this, null);
}
и в вашем aspx:
<a href="javascript:<%=GetPostBack() %>">Click here to postback</a>
Я думаю, что он спрашивает здесь, как вы подключаете функции javascript, чтобы они работали рука об руку с вашими функциями обратной передачи ASP.NET.
т. е. Как я могу вызвать событие элемента управления, используя свой собственный JavaScript?
Библиотека классов ASP.NET содержит класс ClientScript
, находящийся в классе System.Web.UI.Page
, который позволяет программно добавлять JavaScript на страницу ASP.NET.
Он содержит метод с именем GetPostBackEventReference
, который будет генерировать __doPostBack
сценарий, который ASP.NET использует для запуска событий, подключенных к вашим веб-элементам управления.
Надеюсь, это имеет смысл