0

ボタンとラベルが付いた単純な ASP.NET Web フォーム ページがあります。Windows で Safari 5.1.7 を使用している場合、ボタンをクリックするとポストバックが発生しますが、奇妙な理由で実際にはボタン クリック イベントが発生しません。

JavaScript エラーはありません。UpdatePanels や 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 イベントが 1 回発生しますが、Page.IsPostBack は true ではなく FALSE を返し、Label1.Text は設定されません。

この問題は Safari でのみ発生することに注意してください。IE8 以降、FF15 以降、Chrome 21 以降、Opera 12 以降ではすべて正常に動作します。

非表示のフィールド サイズの制限 (したがってビューステート) に関する Safari の奇妙さに関する多数の投稿を読みましたが、このページはビューステートをほとんど使用していないはずです (使用する場合)。UpdatePanels や AJAX 呼び出しに関連する JavaScript エラーに関する投稿も多数ありますが、ご覧のとおり、ここにはありません。

この質問も関連していると思いますが、問題を再現できるように、html/cs の例を使用して新しい質問を開始したかったのです。

何か足りないのでしょうか、それとも Windows の Safari は本当におかしいのでしょうか?

4

1 に答える 1

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
  <button>
  Default Label Text
  Log:
  _Init()
  _Load()
  Page.IsPostBack = False

クリックすると、次のようになります:
  TimeStamp: 59:48.869
  <button>
  TEST!
  ログ:
  _Init()
  _Load()
  Page.IsPostBack = True
  Button1_Click()

于 2012-09-29T06:07:57.590 に答える