Dean
Dean

Reputation: 36

disable button in ascx page prior to postback

How do I disable a button in an ascx page? I know how to do it on an aspx page with:

btnSave.Attributes.Add("onclick", 
  "this.disabled=true;this.value='Please Wait...';needToConfirm=false;" +
  ClientScript.GetPostBackEventReference(btnSave, "").ToString());

But the ClientScript function is not present in the ascx page.

Upvotes: 2

Views: 2062

Answers (5)

Dean
Dean

Reputation: 36

Here's how I fixed the problem. In every page, I have three divs:

<div align="center" id="divWait" style="display:none"><asp:Label ID="lblSaveorCancel" runat="server"></asp:Label></div>

<div style="display:block" id="divMain">

----  page actual content here  ------

</divMain>

<div id="divBut" style="text-align:center;display:block">
<asp:button id="SaveBtn" runat="server" CssClass="button" Text="Save" OnClientClick="return Validate('save');"/>
<asp:button id="CancelBtn" runat="server" CssClass="button" Text="Cancel" OnClientClick="return ShowWaitDiv('cancel');"/>
</div>

And then I added scripts:

function Validate(saveorcancel) {

-----  validation checks for data on the page  ------

}

function ShowWaitDiv(saveorcancel) {
    var div = document.getElementById(divWait.id);
    div.style.display = "block";
    var div1 = document.getElementById(divMain.id);
    div1.style.display = "none";
    var div2 = document.getElementById(divBut.id);
    div2.style.display = "none";
    if (saveorcancel == 'save') {
        document.getElementById('<%= lblSaveorCancel.ClientID %>').innerHTML = 'Saving data, please wait...';
    }
    else {
        document.getElementById('<%= lblSaveorCancel.ClientID %>').innerHTML = 'Redirecting, please wait...';
    }
    return true;
}

Simple, quick, and the user sees the result of clicking a button immediately and cannot click any buttons again.

Upvotes: 0

Shadow Wizard
Shadow Wizard

Reputation: 66388

You don't need the ClientScript in code behind, you can also have it directly in the button tag as OnClientClick attribute:

<asp:Button id="btnSave" runat="server" OnClientClick="this.disabled=true; this.value='Please Wait...'; needToConfirm=false;" Text="Save" />

Upvotes: 3

DDiVita
DDiVita

Reputation: 4265

Did you try: Page.ClientScript.GetPostBackEventReference?

Upvotes: 1

Paolo Falabella
Paolo Falabella

Reputation: 25844

you can access ClientScript through the Page property of your control

Page.ClientScript.GetPostBackEventReference(btnSave, "")

Upvotes: 1

M4N
M4N

Reputation: 96551

You can access the ClientScript property using Page.ClientScript from your user control (ascx).

Upvotes: 1

Related Questions