ASP.NET webforms在Windows上使用Safari 5.1.7回发怪异

时间:2012-09-28 04:40:46

标签: asp.net safari webforms

我有一个带有按钮和标签的简单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真的很奇怪吗?

2 个答案:

答案 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已得到解答,这也解决了我的问题。