Когда я раньше писал программу ASP, я знал, что только кнопка с типом отправки может вызвать форму для отправки данных на сервер.
Например: кнопка в Asp.Net равна <input type="submit">.
Но теперь многие элементы управления в Asp.Net могут по своему желанию взаимодействовать с серверной частью, например LinkButton.
Как это достигается?
Это совершенно новый путь?
На самом деле это всего лишь обходной путь от Microsoft.
Давайте сначала посмотрим на клиентский код.
Вот страница с LinkButton,
Фактически LinkButton на стороне клиента эквивалентен A в html.
Давайте разберемся, почему LinkButton также может взаимодействовать с сервером?
Когда мы щелкаем правой кнопкой мыши, чтобы просмотреть исходный код страницы, мы видим:
<script type="text/javascript">
<!--
вар theForm = document.forms['ctl00'];
если (!Форма) {
theForm = document.ctl00;
}
функция __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
Форма.submit();
}
}
// -->
</script>
<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">Нажмите на меня</a>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
Из приведенного выше кода мы видим, что simpleLinkButton1 — это ссылка, а форма отправляется через клиентский код.
Два скрытых поля используются для обмена данными путем присвоения этим двум скрытым полям двух значений параметров __doPostBack.
Это наиболее понятная причина, по которой LinkButton также имеет возможность отправлять данные.
Так как же был сгенерирован приведенный выше код?
Мы можем это ясно узнать, посмотрев исходный код LinkButton:
защищенное внутреннее переопределение void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if ((this.Page != null) && this.Enabled)
{
this.Page.RegisterPostBackScript();
if ((this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0)) || !string.IsNullOrEmpty(this.PostBackUrl))
{
this.Page.RegisterWebFormsScript();
}
}
}
Вышеупомянутое — всего лишь запись некоторых моих событий во время учебы и работы, чтобы я не забыл их.
Я надеюсь больше общаться со всеми вами!