【问题标题】:ASP.NET webforms postback weirdness with Safari 5.1.7 on Windows [duplicate]在 Windows 上使用 Safari 5.1.7 的 ASP.NET 网络表单回发怪异[重复]
【发布时间】:2012-09-28 04:40:46
【问题描述】:

我有一个带有按钮和标签的简单 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 关于隐藏字段大小限制(以及因此视图状态)的怪异的帖子——但这个页面甚至不应该使用视图状态(如果有的话)。还有很多关于与 UpdatePanels 和/或 AJAX 调用相关的 javascript 错误的帖子,但正如您所见,这里没有。

我相信这个question 也是相关的,但我想用示例 html/cs 开始一个新的,以便您可以重现问题。

是我遗漏了什么还是 Windows 上的 Safari 真的这么奇怪?

【问题讨论】:

    标签: asp.net safari webforms


    【解决方案1】:

    我无法在 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 中点击的初始页面看起来应该是这样的:
    时间戳:58:44.452

    默认标签文本
    日志:
    _Init()
    _Load()
    Page.IsPostBack = False

    点击它看起来也应该:
    时间戳:59:48.869

    测试!
    日志:
    _Init()
    _Load()
    Page.IsPostBack = True
    Button1_Click()

    【讨论】:

    • 感谢您的帮助,但它原来是 IIS 中的协商提供程序。删除它修复了它。有关详细信息,请参阅引用的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 2019-11-24
    • 2013-01-30
    • 1970-01-01
    • 2019-11-10
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多