3

Webフォームに小さな問題があります。二重投稿を防ぐために、送信時に送信ボタンを無効にしようとしています。問題は、ポストバック中に送信ボタンが無効になっている場合、分離コードの onclick メソッドが呼び出されないことです。ポストバックは引き続き発生しますが、ボタンの onclick メソッドは呼び出されません。これを回避する方法はありますか?

ここに問題の小さなデモがあります:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="WebApplication2._default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-2.0.3.min.js"></script>

    <script>
        function disableButton() {
            //$('#<%=btn.ClientID%>').attr('disabled', 'diabled');
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal runat="server" ID="ltrDate" />
        <asp:Button runat="server" ID="btn" OnClientClick="disableButton();" Text="Hit me!" OnClick="Unnamed_Click" />
    </div>
    </form>
</body>
</html>

コードビハインド:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication2
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Unnamed_Click(object sender, EventArgs e)
        {
            Thread.Sleep(1000);
            ltrDate.Text = DateTime.Now.ToString();
        }
    }
}

このコードを実行すると正常に動作しますが、 // を JavaScript メソッドから削除すると、ボタンの onclick メソッドが呼び出されなくなります。(ポストバックは問題なく発生します)

/マーティン

更新: 古い問題のようです..

ボタンがクライアント側で無効になっていると、その情報がサーバーに戻されなくなり、サーバー側のクリックイベントが発生しないため、これが機能することはありませんでした。それがあなたが見ている行動だと思います。もしあなたがこの仕事をすることができたら、私はその方法を知りたいです. イアン・オルセン 2004 年 6 月 9 日水曜日

4

2 に答える 2

4

より簡単な解決策:

<asp:Button ID="btnFind" runat="server" Text="Find"
    OnClientClick="if(this.alreadClicked == true) {this.disabled = true;
    this.value = 'Wait...';} else {this.alreadClicked = true;}" EnableViewState=false
</asp:Button>

とにかくボタンを無効にし、ユーザーに「待機...」というフィードバックを提供しますが、ページが更新されたときにボタンが元の状態にリセットされるように、EnableViewState=false を使用する必要があります。

于 2015-01-08T19:38:35.897 に答える