#asp.net
Вопрос:
У меня странное поведение страницы .aspx внутри iframe
. Первый щелчок по кнопке «Отправить» не создает Page.IsPostBack
и не запускает обработчик обратной передачи. Второй щелчок делает это. Вот код.
.aspx
<!DOCTYPE html>
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="form.aspx.vb" Inherits="form" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>form inside iframe</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%--More controls--%>
<asp:Button Text="Submit" ID="btnSubmit" runat="server" />
</div>
</form>
</body>
</html>
.aspx.vb
Partial Class form
Inherits System.Web.UI.Page
Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'// After first click on btnSubmit Page.IsPostBack is False
'// and btnSubmit_Click handler isnot fired
'// After second click on btnSubmit Page.IsPostBack is True
'// and btnSubmit_Click handler IS fired
'//This is a patch to work around misbehavior
If Request.HttpMethod = "POST" Then
btnSubmit_Click(btnSubmit, EventArgs.Empty)
End If
End If
End Sub
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
'//Do something
End Sub
End Class
Вопрос в основном является предупреждением, так как я уже исправил проблему.
Комментарии:
1. Получаете ли вы ожидаемое поведение, если оно не размещено в iFrame?
2. конечно, да. Это стандартное поведение страницы.
3. Я подозреваю, что это как-то связано с кэшированием.
4. Выполняется ли метод Page_Load как при начальной загрузке страницы, так и при первом щелчке? Я думаю , что в соответствии с устаревшими токенами проверки подлинности запросов и т. Д. (Т. Е. кэшированием, как вы упомянули) Также являются хост-и дочерние страницы в одном домене/
5. @JonP iframe Page_Load не запускается при начальной загрузке родительской страницы (которая кэшируется). загрузка страницы iframe срабатывает при первом и втором щелчке. Первый щелчок… см.соч. Родительская страница кэшируется. Обе страницы (родительская и iframe) находятся в одном домене.