我有一个带有按钮和标签的简单ASP.NET网页表单页面。在Windows上使用Safari 5.1.7时,单击该按钮会导致回发,但实际上并不会导致按钮单击事件因某些奇怪的原因而触发。
没有javascript错误。没有任何类型的UpdatePanel或AJAX。这就是我正在测试的页面:
<!doctype html>
<html lang="en">
<head runat="server">
<meta charset="utf-8">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
背后的代码很简单:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "test";
}
单击该按钮时,Page_Load事件会触发一次,但Page.IsPostBack返回FALSE而不是true,并且从不设置Label1.Text。
请注意,此问题仅发生在Safari中。在IE8 +,FF15 +,Chrome 21+和Opera 12 +中,一切正常。
我已经阅读了很多关于Safari隐藏字段大小限制(以及因此视图状态)的古怪帖子 - 但这个页面几乎不应该使用viewstate(如果有的话)。关于UpdatePanels和/或AJAX调用的javascript错误也有很多帖子,但正如你所看到的那样,这里没有。
我相信这个question也是相关的,但我想用示例html / cs开始一个新的,这样你就可以重现这个问题。
我是否遗漏了某些内容,或者Windows上的Safari真的很奇怪吗?
答案 0 :(得分:0)
我无法在Safari 5.1.7中复制此内容。您能否提供有关如何约束活动的更多信息?您onclick="Button1_Click"
的手动分配意味着您正在进行手动事件连接。您的页面声明是否与此匹配?
您确定您的Page_Load事件正在解雇;你的例子是空的。
也许一个更详细的事件绑定是有序的,下面对我有用:
ASPX测试页面:
<%@ Page Language="C#" AutoEventWireup="false"
CodeFile="default.aspx.cs" Inherits="PgSafari" %>
<!doctype html>
<html lang="en">
<head runat="server">
<meta charset="utf-8">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div><asp:Literal runat="server" ID="litTimeStamp" EnableViewState="false" /></div>
<div><asp:Button ID="Button1" runat="server" Text="Button" /></div>
<div><asp:Label ID="Label1" runat="server" Text="Default Label Text" /></div>
<div>
<h6>Log:</h6>
<asp:PlaceHolder runat="server" ID="plcOut" />
</div>
</form>
</body>
</html>
代码背后:
using System;
using System.Web.UI;
public partial class PgSafari : System.Web.UI.Page
{
public PgSafari()
{
//Bind Page Events
this.Init += new EventHandler(PgSafari_Init);
this.Load += new EventHandler(PgSafari_Load);
}
protected void PgSafari_Init(object sender, EventArgs e)
{
Log("_Init()");
//Bind Page Control Events
Button1.Click += new EventHandler(Button1_Click);
}
protected void PgSafari_Load(object sender, EventArgs e)
{
Log("_Load()");
Log("Page.IsPostBack = " + (Page.IsPostBack));
litTimeStamp.Text = "TimeStamp: " + DateTime.Now.ToString("mm:ss.fff");
}
protected void Button1_Click(object sender, EventArgs e)
{
Log("Button1_Click()");
Label1.Text = "test";
}
//===============\\
private void Log(String msg)
{
plcOut.Controls.Add(new LiteralControl("<div>" + msg + "</div>"));
}
}
Safari中的初始页面看起来应该是:
TimeStamp:58:44.452
&LT;按钮&GT;
默认标签文本
登录:
_Init()
_Load()
Page.IsPostBack = False
点击它看起来应该也是:
TimeStamp:59:48.869
&LT;按钮&GT;
测试!
登录:
_Init()
_Load()
Page.IsPostBack = True
的button1_Click()
答案 1 :(得分:0)
顶部引用的类似question已得到解答,这也解决了我的问题。