12

ボタンに対して次の onclick イベントがあります。このイベントが終了したら、ボタンを無効にしたいと思います。誰かがそれを行う方法を理解するのを手伝ってもらえますか?

ボタンクリックイベントで実行するコードは次のとおりです。

protected void Button3_Click(object sender, EventArgs e)
{

    if (Session["login"] != null && Session["db"] != null)
    {

        digit b = new digit();
        String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);

        chekcount c = new chekcount();
        int count = c.getmaxcountforjud_no(digitformed);
        int addtocount = count + 1;

        String name = Session["login"].ToString();
        String databs = Session["db"].ToString();
        String complex_name = name + databs;

        if (DropDownList2.SelectedItem.Text != "New")
        {
            update u = new update();
            u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
            Response.Write(@"<script language='javascript'>alert('Updated')</script>");

        }
        else
        {
            save d = new save();
            d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
            Response.Write(@"<script language='javascript'>alert('Saved')</script>");

        }
    }
    else
    {
        Response.Redirect("log.aspx");
    }
}

これが無効にしたいボタンです。

<asp:Button ID="Button3" runat="server" Text="Save" onclick="Button3_Click" 
                    Visible="False" />
4

10 に答える 10

32

ボタン コントロールの OnClientClick プロパティと UseSubmitBehavior プロパティを使用します。

<asp:Button runat="server" ID="BtnSubmit" 
  OnClientClick="this.disabled = true; this.value = 'Submit in progress...';" 
  UseSubmitBehavior="false" 
  OnClick="BtnSubmit_Click" 
  Text="Click to Submit" />

OnClientClick を使用すると、クライアント側の OnClick スクリプトを追加できます。この場合、JavaScript はボタン要素を無効にし、そのテキスト値を進行状況メッセージに変更します。ポストバックが完了すると、新しくレンダリングされたページは、追加の作業なしでボタンを初期状態に戻します。

クライアント側で送信ボタンを無効にすると、ブラウザーの送信がキャンセルされ、ポストバックがキャンセルされるという落とし穴があります。UseSubmitBehavior プロパティを false に設定すると、ブラウザーのフォーム送信動作に依存するのではなく、ポストバックを起動するために必要なクライアント スクリプトを挿入するように .NET に指示します。この場合、挿入されるコードは次のようになります。

__doPostBack('BtnSubmit','')

再編集された HTML:

<input type="button" name="BtnSubmit" 
  onclick="this.disabled = true; this.value = 'Submitting...';__doPostBack('BtnSubmit','')"
  value="Submit Me!" id="BtnSubmit" />

これにより、目的の動作が得られるはずです。

From: http://encosia.com/disable-a-button-control-during-postback/ クレジット: Dave Ward (Twitter: @Encosia)

于 2011-12-12T11:09:33.197 に答える
16

やってみました?:

protected void Button3_Click(object sender, EventArgs e)
{
   Button3.Enabled = false;
   //rest of code
}
于 2011-12-12T11:02:59.667 に答える
5

他のポスターで詳しく説明されているように、サーバー側のコードでボタンの Enabled プロパティを設定する必要があります。ただし、同じボタンからの複数の送信を防止しようとしている場合は、少し異なる方法が必要になります。

クラスにメソッドを追加します。

static void DisableButtonDuringPostback(Page page, Button control)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("this.disabled = true;");
    sb.Append(page.ClientScript.GetPostBackEventReference(control, control.ID.ToString()));
    sb.Append(";");

    control.Attributes.Add("onclick", sb.ToString());

}

Page_Load に追加

DisableButtonDuringPostback(this.Page, Button3);
于 2011-12-12T11:11:27.130 に答える
5
<asp:Button  onclick="Button3_Click" ID="Button3" runat="server" Text="Save"
OnClientClick="this.disabled = true; this.value = 'please wait ..';" 
UseSubmitBehavior="false"     />
于 2011-12-12T11:07:53.107 に答える
2

マークされたコードを参照

protected void Button3_Click(object sender, EventArgs e)
{

    ** if (Session["Clicked"] == null)
        Session["Clicked"] = true;
    else
    {
        Button3.Enabled = false;
        return;
    } **


    if (Session["login"] != null && Session["db"] != null)
    {

        digit b = new digit();
        String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);

        chekcount c = new chekcount();
        int count = c.getmaxcountforjud_no(digitformed);
        int addtocount = count + 1;

        String name = Session["login"].ToString();
        String databs = Session["db"].ToString();
        String complex_name = name + databs;

        if (DropDownList2.SelectedItem.Text != "New")
        {
            update u = new update();
            u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
            Response.Write(@"<script language='javascript'>alert('Updated')</script>");

        }
        else
        {
            save d = new save();
            d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
            Response.Write(@"<script language='javascript'>alert('Saved')</script>");

        }
    }
    else
    {
        Response.Redirect("log.aspx");
    }
}
于 2011-12-12T11:02:52.117 に答える
2
   ///count number of button click
    var counter = 0;
    function countclickbutton() {
        counter++;
        if (counter > 1) {
            alert("proessing..please wait.");
//do not allow to again click
            return false;
        }
        else {

            return true;
        }
    }

これをボタンの onClientClick と呼びます

于 2011-12-12T11:11:01.793 に答える
1

あなたがjqueryを使ってそれをしたいのなら

$('#button3').attr("disabled", true); 
于 2011-12-12T11:04:36.927 に答える
0

これは古い投稿ですが、完全に回答されているとは思いません。

まず、ASP.NET WebForms ではHTTP GET、Web サーバーに要求を送信します。Web サーバーは要求を処理し、ブラウザーがレンダリングするクライアント側の HTML コードを出力します。

サーバー側のコントロールを操作しているVIEWSTATEとき、プロパティの非表示の入力フィールドに値が含まれています ( のブール値などEnabled)。

ボタンをクリックするとHTTP POST、同じページの Web サーバーにリクエストが送信されます。Page_Loadこれが、ボタンをクリックしたときにイベントが発生する理由です。

リクエストが処理されるHTTP POSTと、ブラウザが再レンダリングするための HTML コードが返されます。このため、Page_Loadイベントに次のコードがある場合:

if (Page.IsPostBack) { Button3.Enabled = false; }

HTTP POSTリクエストが処理され、更新されたクライアント側コードが返されるまで、無効になっていることはユーザーに表示されません。

最初の質問から、サーバーが応答を返すのに数秒かかっているように見えたので、ボタンを何度もクリックすると、複数のポストバック イベントが発生する可能性がありました。

問題を解決する簡単な (しかし厄介な) 方法は、通常の HTMLを JavaScript でbutton実行することfunctionです。これにより、JavaScript が無効になり、サーバー側コントロールの onclick イベントが発生します。これに関する問題は、HTTP POSTリクエストがレスポンスを返すときに、通常の HTMLbuttonが有効としてレンダリングされることです。これを解決するには、インライン ASP.NET コードを使用して JavaScript で無効にするだけです。次に例を示します。

.ASPX ファイル

<button id="clientButton" onclick="javascript:update();" />
<asp:Button ID="serverButton" OnClick="serverButton_OnClick" runat="server" />
<script type="text/javascript">
<% if (Page.IsPostBack) { %>
document.getElementById("clientButton").enabled = false;
<% } %>
function update() {
    document.getElementById("clientButton").enabled = false;
    document.getElementById("<%= serverButton.ClientID %>").click();
}
</script>
<style type="text/css">
#<%= serverButton.ClientID %> {
    visibility: hidden;
    display: none;
}
</style>



.ASPX.CS ファイル

protected void Page_Load(object sender, EventArgs e) 
{
    if (Page.IsPostBack) 
    {
        // Triggered when serverButton has 'javascript:click()' triggered
    }
}
于 2016-08-18T14:43:45.927 に答える