Как отключить кнопку после первого нажатия - PullRequest
9 голосов
/ 12 декабря 2011

У меня есть следующее событие onclick для кнопки. как только это событие будет запущено, я хочу отключить кнопку. Может кто-нибудь помочь мне понять, как это сделать?

Вот код, который я выполняю для события clickclick.

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" />

Ответы [ 9 ]

29 голосов
/ 12 декабря 2011

Используйте свойства 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" />

Это должно дать вам желаемое поведение.

От: http://encosia.com/disable-a-button-control-during-postback/ Предоставлено: Дейв Уорд (Twitter: @Encosia)

15 голосов
/ 12 декабря 2011

Вы пробовали?:

protected void Button3_Click(object sender, EventArgs e)
{
   Button3.Enabled = false;
   //rest of code
}
5 голосов
/ 12 декабря 2011

Вам необходимо установить свойство 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);
5 голосов
/ 12 декабря 2011
<asp:Button  onclick="Button3_Click" ID="Button3" runat="server" Text="Save"
OnClientClick="this.disabled = true; this.value = 'please wait ..';" 
UseSubmitBehavior="false"     />
2 голосов
/ 12 декабря 2011
   ///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;
        }
    }

вызовите это по кликуНажмите кнопку

2 голосов
/ 12 декабря 2011

См. Отмеченный код

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");
    }
}
1 голос
/ 12 декабря 2011

, если вы хотите сделать это с помощью jquery, чем

$('#button3').attr("disabled", true); 
0 голосов
/ 26 июня 2018

Для приложений WPF

Button1.IsEnabled = false;  // Replace Button1 with your button name, false disables button
0 голосов
/ 18 августа 2016

Это старый пост, однако я не думаю, что на него полностью ответили.

Во-первых, в ASP.NET WebForms вы отправляете запрос HTTP GET на веб-сервер, который обрабатывает ваш запрос ивыводит HTML-код на стороне клиента для отображения браузером.

Поскольку вы взаимодействуете с серверным элементом управления, значения содержатся в скрытом поле ввода VIEWSTATE для свойств (например, логическое значение для Enabled).

Когда вы нажимаете кнопку, она отправляет запрос HTTP POST на веб-сервер на той же странице.Вот почему событие Page_Load вызывается при нажатии кнопки.

После обработки запроса HTTP POST он возвращает HTML-код для повторного рендеринга браузера.По этой причине, если у вас есть следующий код в вашем Page_Load событии:

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

Он не покажет пользователю, что он отключен, пока запрос HTTP POST не будет обработан и не вернетобновленный код на стороне клиента.

Из первоначального вопроса выяснилось, что серверу потребовалось несколько секунд, чтобы вернуть ответ, поэтому при повторном нажатии кнопки может вызываться несколько событий обратной передачи.

Простой (но раздражающий) способ решения вашей проблемы - использовать обычный HTML button, выполняющий function в JavaScript, который отключает его и запускает событие onclick серверного элемента управления.Тогда проблема заключается в том, что, когда запрос HTTP POST возвращает ответ, он отображает обычный HTML button как включенный.Чтобы решить эту проблему, вы можете просто отключить его в JavaScript, используя встроенный код ASP.NET.Вот пример:

.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 File

protected void Page_Load(object sender, EventArgs e) 
{
    if (Page.IsPostBack) 
    {
        // Triggered when serverButton has 'javascript:click()' triggered
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...