Отключить кнопку после нажатия, сохраняя при этом CausesValidation и OnClick-метод - PullRequest
3 голосов
/ 15 декабря 2011

Итак, у меня есть эта кнопка:

<asp:Button runat="server" ID="btnSubmit" meta:resourcekey="btnSubmit" CausesValidation="true" OnClick="btnSubmit_Click" />

meta: resourcekey для ресурсов локализации, нас это не касается - как мы видим, у него есть метод OnClick и он вызывает валидацию.

Это тоже отлично работает, но я бы хотел отключить эту кнопку после того, как пользователь нажал на нее, чтобы он / она не мог щелкнуть по ней несколько раз, прежде чем PostBack преуспеет, поэтому вот что я сделал в Page_Load:

btnSubmit.Attributes.Add("onclick", "this.disabled=true;" +
        Page.ClientScript.GetPostBackEventReference(btnSubmit, "").ToString());

onclick Я отключаю кнопку и повторно добавляю PostBackReference, необходимый для метода OnClick.

Проблема: Причины исчезли, печальное лицо.Как именно я могу добавить это в CodeBehind или, в качестве альтернативы, - Какое решение может быть совсем другим?

Моя кнопка должна:

a) отключить себя после нажатия, но включить его послеобратная передача b) имеет метод OnClick CodeBehind c) вызывает проверку

Спасибо,

Денис

Ответы [ 3 ]

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

Просто переопределите событие Onload вашей страницы или главной страницы с помощью

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
   // prevents form from being submitted multiple times in MOST cases
   // programatic client-side calls to __doPostBack() can bypass this
    Page.ClientScript.RegisterOnSubmitStatement(GetType(), "ServerForm",
    "if (this.submitted) return false; this.submitted = true; return true;");
}
3 голосов
/ 15 декабря 2011

Попробуйте следующее в Page_Load

VB

Dim postBackOptions As PostBackOptions = New PostBackOptions(btnSubmit)
btnSubmit.OnClientClick = "this.disabled=true;"
btnSubmit.OnClientClick += ClientScript.GetPostBackEventReference(postBackOptionClaim)

C #

PostBackOptions postBackOptions = new PostBackOptions(btnSubmit);
btnSubmit.OnClientClick = "this.disabled=true;";
btnSubmit.OnClientClick += ClientScript.GetPostBackEventReference(postBackOptionClaim);
0 голосов
/ 15 декабря 2011

EDIT

if(Page_ClientValidate()) {this.visibility='hidden';}

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

Вы можете поместить скрытое поле и сгенерировать GUID для него в page_load, если (! IsPostBack) затем на вашем btnSubmit_click сделать что-то вроде

if(Session[Page.ToString() + "_spam"] != null && Session[Page.ToString() + "_spam"] == hdnGuid.Value) { 
    return 
} else { 
    Session[Page.ToString() + "_spam"] = hdnGuid.Value; 
    //do stuff 
}
...