Отключите кнопку на представлении формы

Я не очень понимаю, что вы пытаетесь сказать, но все равно.

mutableListOf является функцией , которая создает MutableList<T>, используя входные аргументы в качестве начальных значений. Это означает, что строка

mutableListOf<Int>(3, 7, 8)

будет выводить List<Int>, например [3, 7, 8]


ArrayList<String>(3) означает « создать контейнер ArrayList с начальной емкостью 3 элемента ". Это означает, что строка

val arrTwo:ArrayList<String> = ArrayList<String>(3)

будет выводить List<String>, например, []

Оба могут быть видоизменены после создания, и оба подлежат IndexOutOfBoundsException с помощью set или get (ArrayList расширяет MutableList)

15
задан Shog9 20 September 2008 в 06:17
поделиться

15 ответов

Дайте этому водоворот:

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

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

         // Identify button as a "disabled-when-clicked" button...
         WebHelpers.DisableButtonOnClick( buttonTest, "showPleaseWait" ); 
    }

    protected void buttonTest_Click( object sender, EventArgs e )
    {
        // Emulate a server-side process to demo the disabled button during
        // postback.
        Thread.Sleep( 5000 );
    }
}



using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Text;

public class WebHelpers
{
    //
    // Disable button with no secondary JavaScript function call.
    //
    public static void DisableButtonOnClick( Button ButtonControl )
    {
        DisableButtonOnClick( ButtonControl, string.Empty );    
    }

    //
    // Disable button with a JavaScript function call.
    //
    public static void DisableButtonOnClick( Button ButtonControl, string ClientFunction )
    {   
        StringBuilder sb = new StringBuilder( 128 );

        // If the page has ASP.NET validators on it, this code ensures the
        // page validates before continuing.
        sb.Append( "if ( typeof( Page_ClientValidate ) == 'function' ) { " );
        sb.Append( "if ( ! Page_ClientValidate() ) { return false; } } " );

        // Disable this button.
        sb.Append( "this.disabled = true;" ); 

        // If a secondary JavaScript function has been provided, and if it can be found,
        // call it. Note the name of the JavaScript function to call should be passed without
        // parens.
        if ( ! String.IsNullOrEmpty( ClientFunction ) ) 
        {
            sb.AppendFormat( "if ( typeof( {0} ) == 'function' ) {{ {0}() }};", ClientFunction );  
        }

        // GetPostBackEventReference() obtains a reference to a client-side script function 
        // that causes the server to post back to the page (ie this causes the server-side part 
        // of the "click" to be performed).
        sb.Append( ButtonControl.Page.ClientScript.GetPostBackEventReference( ButtonControl ) + ";" );

        // Add the JavaScript created a code to be executed when the button is clicked.
        ButtonControl.Attributes.Add( "onclick", sb.ToString() );
    }
}
14
ответ дан 1 December 2019 в 00:54
поделиться

Отключите кнопку в самом конце Вашего отправлять обработчик. Если проверка перестала работать, она должна возвратить false перед этим.

Однако подход JavaScript не что-то, на что можно положиться, таким образом, у Вас должно быть что-то для обнаружения дубликатов на сервере также.

2
ответ дан 1 December 2019 в 00:54
поделиться

Следующая функция полезна, не будучи нужен в части отключения, которая имеет тенденцию быть ненадежной. Просто используйте "возврат check_submit ()"; как часть onclick обработчика кнопок отправки.

должно также быть скрытое поле для содержания form_submitted начального значения 0;

<input type="hidden" name="form_submitted" value="0">

function check_submit (){
            if (document.Form1.form_submitted.value == 1){
                alert("Don't submit twice. Please wait.");
                return false;
            }
            else{
                document.Form1.form_submitted.value = 1;
                return true;
            }
            return false;
    }
5
ответ дан 1 December 2019 в 00:54
поделиться

Я не огромный поклонник записи всего что JavaScript в коде - позади. Вот то, на что похоже мое конечное решение.

Кнопка:

<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" OnClientClick="doSubmit(this)" />

JavaScript:

<script type="text/javascript"><!--
function doSubmit(btnSubmit) {
    if (typeof(Page_ClientValidate) == 'function' && Page_ClientValidate() == false) { 
        return false;
    }    
    btnSubmit.disabled = 'disabled';
    btnSubmit.value = 'Processing. This may take several minutes...';
    <%= ClientScript.GetPostBackEventReference(btnSubmit, string.Empty) %>;    
}
//-->
</script>
17
ответ дан 1 December 2019 в 00:54
поделиться

Решение будет состоять в том, чтобы установить скрытое поле, когда кнопка нажата с номером 1.

На обработчике нажатий кнопки, первая вещь состоит в том, чтобы проверить, что число, если это - что-то другое, чем 1 просто возврат из функции.

0
ответ дан 1 December 2019 в 00:54
поделиться

Можно также смочь использовать в своих интересах onsubmit () событие JavaScript, которое доступно на формах. Это событие стреляет, когда форма, на самом деле отправляют и не должен захватывать, пока проверка не завершена.

0
ответ дан 1 December 2019 в 00:54
поделиться

Это - более легкий, но похожий метод, чем, что предложил rp:

function submit(button) {
        Page_ClientValidate(); 
        if(Page_IsValid)
        {
            button.disabled = true;
        }
}

 <asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_OnClick" OnClientClick="submit(this)" Text="Submit Me" />
0
ответ дан 1 December 2019 в 00:54
поделиться

Не уверенный, если это поможет, но в форме существует onsubmit событие. Можно использовать это событие каждый раз, когда форма отправляет (от любой кнопки или средств управления). Для ссылки: http://www.htmlcodetutorial.com/forms/_FORM_onSubmit.html

0
ответ дан 1 December 2019 в 00:54
поделиться

если проверка успешна, то отключите кнопку. если это не, то не делайте.

function validate(form) {
  // perform validation here
  if (isValid) {
    form.mySubmitButton.disabled = true;
    return true;
  } else {
    return false;
  }
}

<form onsubmit="return validate(this);">...</form>
2
ответ дан 1 December 2019 в 00:54
поделиться

Установите видимость на кнопке ни к 'одному';


btnSubmit.Attributes("onClick") = document.getElementById('btnName').style.display = 'none';

Не только делает это предотвращает двойное представление, но и это - ясный индикатор пользователю, что Вы не хотите кнопку, нажатую несколько раз.

1
ответ дан 1 December 2019 в 00:54
поделиться

Столкнулся с кодом RP в нашем приложении прежней версии, которое боролось с некоторым сумасшедшим поведением.

Разыскал его к странной комбинации увольнения события - когда DisableButtonOnClick () использовался на кнопке asp в UpdatePanel, POST будет отправлен дважды (однажды doPostBack, добавленным DisableButtonOnClick (), и однажды UpdatePanel). Однако это только произошло с некоторыми браузерами (ранние версии Края, но не недавние, и IE11 сделал это, Chrome и FireFox не сделали (по крайней мере, версии, которые я протестировал с)). Я предполагаю Chrome, и более новые версии Края имеют дело с этим сценарием внутренне в некотором роде. При отслеживании проблемы с F12 devtools в IE - два СООБЩЕНИЯ происходят так тесно вместе, что первый сразу ПРЕРЫВАЕТСЯ, но при некоторых условиях (сетевая задержка, загрузка пользовательской машины, и т.д.) запрос действительно добирается до сервера, прежде чем браузер сможет прерваться. Таким образом, это приводит к на вид случайному двойному сообщению, прибывающему из нажатий кнопки по всей системе, и это была боль для прослеживания. Фиксация должна добавить, "возвращают false"; после doPostBack, чтобы препятствовать тому, чтобы UpdatePanel принял участие, когда более старые браузеры находятся в игре.

TLDR - остерегаются этого кода кнопок в updatepanels. Это - хороший подход и хороший метод, но имеет потенциальную проблему в моем (вероятный край) случай.

пикосекунда - я прокомментировал бы сообщение RP, но у меня нет мысли представителя, что это могло бы быть полезно для будущих путешественников.

0
ответ дан 1 December 2019 в 00:54
поделиться

Только что слышали о свойстве DisableOnSubmit для , например:

<asp:Button ID="submit" runat="server" Text="Save"
    OnClick="yourClickEvent" DisableOnSubmit="true" />

При визуализации атрибут кнопки onclick выглядит примерно так:

onclick="this.disabled=true; setTimeout('enableBack()', 3000);
  WebForm_DoPostBackWithOptions(new
  WebForm_PostBackOptions('yourControlsName', '', true, '', '', false, true))

А функция javascript "enableBack ()" выглядит так:

function enableBack()
{
    document.getElementById('yourControlsName').disabled=false;
}

Итак, когда кнопка нажата, она отключается на 3 секунды. Если форма отправляется успешно, вы никогда не увидите, что кнопка повторно включить Если, однако, какие-либо валидаторы не работают, кнопка снова становится активной через 3 секунды.

Для этого достаточно установить атрибут на кнопку - код JavaScript не нужно писать вручную.

0
ответ дан 1 December 2019 в 00:54
поделиться

Правильный (по крайней мере, с точки зрения удобства использования) способ - отключить кнопку с помощью атрибута OnClientClick, выполнить проверку на стороне клиента, а затем использовать результат чтобы продолжить или снова включить кнопку.

Конечно, вы должны ТАКЖЕ написать для этого код на стороне сервера, поскольку вы не можете полагаться на проверку, даже если она выполняется из-за отсутствия или конкретной реализации JavaScript. Однако, если вы полагаетесь на сервер, контролирующий состояние включения / выключения кнопки, то в любом случае у вас практически нет возможности заблокировать пользователя, отправляющего форму несколько раз. По этой причине у вас должна быть какая-то логика для обнаружения нескольких отправок от одного и того же пользователя за короткий период времени (например, одинаковые значения из одного сеанса).

0
ответ дан 1 December 2019 в 00:54
поделиться

Обратите внимание, что подход rp будет дважды отправлять ваши формы, если вы используете кнопки с UseSubmitBehavior = "false" .

Я использую следующий вариант кода rp:

public static void DisableButtonOnClick(Button button, string clientFunction)
{
    // If the page has ASP.NET validators on it, this code ensures the
    // page validates before continuing.
    string script = "if (typeof(Page_ClientValidate) == 'function') { "
            + "if (!Page_ClientValidate()) { return false; } } ";

    // disable the button
    script += "this.disabled = true; ";

    // If a secondary JavaScript function has been provided, and if it can be found, call it.
    // Note the name of the JavaScript function to call should be passed without parens.
    if (!string.IsNullOrEmpty(clientFunction))
        script += string.Format("if (typeof({0}) == 'function') {{ {0}() }} ", clientFunction);

    // only need to post back if button is using submit behaviour
    if (button.UseSubmitBehavior)
        script += button.Page.GetPostBackEventReference(button) + "; ";

    button.Attributes.Add("onclick", script);
}
0
ответ дан 1 December 2019 в 00:54
поделиться

одно из моих решений заключается в следующем:

добавьте скрипт в page_load вашего aspx файла

    HtmlGenericControl includeMyJava = new HtmlGenericControl("script");
    includeMyJava.Attributes.Add("type", "text/javascript");
    includeMyJava.InnerHtml = "\nfunction dsbButton(button) {";
    includeMyJava.InnerHtml += "\nPage_ClientValidate();";
    includeMyJava.InnerHtml += "\nif(Page_IsValid)";
    includeMyJava.InnerHtml += "\n{";
    includeMyJava.InnerHtml += "\nbutton.disabled = true;";
    includeMyJava.InnerHtml += "}";
    includeMyJava.InnerHtml += "\n}";
    this.Page.Header.Controls.Add(includeMyJava);

и затем установите параметры кнопки aspx следующим образом:

<asp:Button ID="send" runat="server" UseSubmitBehavior="false" OnClientClick="dsbButton(this);" Text="Send" OnClick="send_Click" />

Обратите внимание, что " onClientClick »помогает отключить кнопку, а« UseSubmitBehaviour »отключает традиционное поведение отправки страницы и позволяет asp.net отображать поведение отправки по пользовательскому сценарию.

удачи

-Waqas Aslam

0
ответ дан 1 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: