ボタンに対して次のonclickイベントがあります。このイベントが完了したら、ボタンを無効にします。誰かがそれを行う方法を理解するのを手伝ってくれる?
これが、buttonclickイベントで実行するコードです。
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" />
やってみました?:
protected void Button3_Click(object sender, EventArgs e)
{
Button3.Enabled = false;
//rest of code
}
ボタンコントロールの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はボタン要素を無効にし、そのテキスト値を進行メッセージに変更します。ポストバックが完了すると、新たにレンダリングされたページは、追加の作業をせずにボタンを元の状態に戻します。
クライアント側で送信ボタンを無効にすると発生する1つの落とし穴は、ブラウザの送信がキャンセルされ、ポストバックがキャンセルされることです。 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" />
これにより、望ましい動作が得られます。
差出人: http://encosia.com/disable-a-button-control-during-postback/ クレジット:Dave Ward(Twitter:@Encosia)
<asp:Button onclick="Button3_Click" ID="Button3" runat="server" Text="Save"
OnClientClick="this.disabled = true; this.value = 'please wait ..';"
UseSubmitBehavior="false" />
他のポスターで詳しく説明されているように、サーバー側のコードでボタンの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);
///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と呼びます
マークされたコードを見る
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");
}
}
あなたがjqueryを使用してそれをしたい場合
$('#button3').attr("disabled", true);
これは古い投稿ですが、完全には回答されていないと思います。
まず、ASP.NET Webフォームで、HTTP GET
要求をWebサーバーに送信します。このサーバーは、要求を処理し、ブラウザーがレンダリングするクライアント側HTMLコードを出力します。
サーバー側コントロールとやり取りしているとき、値はプロパティの非表示のVIEWSTATE
入力フィールド(Enabled
のブールなど)に含まれています。
ボタンをクリックすると、同じページのWebサーバーにHTTP POST
リクエストが送信されます。これが、ボタンをクリックしたときにPage_Load
イベントが発生する理由です。HTTP POST
リクエストが処理されると、ブラウザが再レンダリングするためのHTMLコードが返されます。このため、Page_Load
イベントに次のコードがある場合:
if (Page.IsPostBack) { Button3.Enabled = false; }
HTTP POST
リクエストが処理され、更新されたクライアント側コードが返されるまで、無効になっていることがユーザーに表示されません。
最初の質問から、サーバーが応答を返すのに数秒かかっているように見えたため、ボタンを何度もクリックすると、複数のポストバックイベントが発生する可能性がありました。
問題を解決する簡単な(しかし厄介な)方法は、JavaScriptでbutton
を実行する通常のHTML function
を実行して無効にし、サーバー側コントロールのonclickイベントを発生させることです。この場合の問題は、HTTP POST
リクエストが応答を返すときに、通常のHTMLのbutton
が有効になっていることです。これを解決するには、インライン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
}
}
WPFアプリケーションの場合
Button1.IsEnabled = false; // Replace Button1 with your button name, false disables button