Как отключить кнопку после 1-го клика

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

вот код, который я выполняю на событии 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" />

9 ответов


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

protected void Button3_Click(object sender, EventArgs e)
{
   Button3.Enabled = false;
   //rest of code
}

используйте свойства OnClientClick и UseSubmitBehavior элемента управления button.

<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 отключит элемент button и изменит его текстовое значение на сообщение о ходе выполнения. По завершении обратной передачи вновь отображаемая страница вернет кнопку в исходное состояние без дополнительной работы.

одна ловушка, которая поставляется с отключением кнопки отправки на клиентская сторона заключается в том, что она отменит отправку браузера и, следовательно, обратную передачу. Установка свойства UseSubmitBehavior в false говорит .NET ввести необходимый клиентский скрипт для запуска обратной передачи в любом случае, вместо того, чтобы полагаться на поведение отправки формы браузера. В этом случае код, который он вводит, будет:

__doPostBack('BtnSubmit','')

Redered 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/ Кредит: Дэйв Уорд (Твиттер: @Encosia)


вам нужно будет установить свойство 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);

<asp:Button  onclick="Button3_Click" ID="Button3" runat="server" Text="Save"
OnClientClick="this.disabled = true; this.value = 'please wait ..';" 
UseSubmitBehavior="false"     />

см. отмеченный код

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");
    }
}

   ///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 кнопки


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

$('#button3').attr("disabled", true); 

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

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

При взаимодействии с серверным элементом управления значения содержатся в скрытом VIEWSTATE поле ввода для свойства (например, boolean для 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, используя in-line 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>



.АСПН.Файл 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