Я не должен понимать чего-то фундаментального о цикле обработки aspx-страницы. Взгляните на этот простой пример ниже.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div>
<form method="post">
<textarea name="someContent" cols="35" rows="15"></textarea>
<input type="submit"/>
</form>
</div>
</body>
</html>
<script runat="server">
public void Page_Load() {
// The httpMethod is always set correctly to "GET" or "POST"
String httpMethod = HttpContext.Current.Request.HttpMethod;
if(IsPostBack)
DoSomething();
else
DoSomethingElse();
}
</script>
Обратите внимание, что у элемента ‹form› нет атрибута runat = 'server'.
Когда страница загружается в первый раз, запускается Page_Load (), а для переменной httpMethod устанавливается значение «GET», а свойство IsPostback возвращает false, как и ожидалось.
Когда пользователь нажимает кнопку «отправить», снова запускается Page_Load (), а для переменной httpMethod устанавливается значение «POST», поэтому система ASP.NET, очевидно, знает, что это команда POST; однако свойство IsPostBack по-прежнему возвращает false. Мне это кажется странным. Я бы подумал, что если для httpMethod установлено значение «POST», IsPostBack вернет true.
Если я изменю элемент ‹form›, чтобы он содержал атрибут runat = 'server', все немного изменится. Теперь, когда пользователь нажимает кнопку «отправить», для переменной httpMethod устанавливается значение «POST», как и раньше, но теперь IsPostBack возвращает true.
Поскольку мне не нужно обращаться к элементу ‹form› на сервере, я не видел необходимости использовать на нем атрибут runat = 'server'. Но по какой-то причине runat = 'server' должен присутствовать в ‹form›, чтобы IsPostBack возвращал правильное значение, даже если свойство HttpContext.Current.Request.HttpMethod возвращает правильное значение независимо от runat = Атрибут server.
Может ли кто-нибудь объяснить, ПОЧЕМУ для правильной работы IsPostBack необходим runat = 'server' на ‹form›?
ПРИМЕЧАНИЕ. Обратите внимание, что я не спрашиваю, как «сделать то» или «сделать то». Моя цель - понять «Почему».
Спасибо