stop postback from code behind using c# - c#

I have a button and I want to stop post back whenever someone clicks on that button.
I don't want to use return false like this
<asp:Button runat="server" Text="Click" OnClick="Unnamed1_Click" OnClientClick="javascript:return false;" />
I want to stop it from code behind.
I want to create a div and some content inside the div , so when ever someone click on that button another div will be created with it's contents, but the problem is when I click the button and a post back happen , it remove the first div and construct the second one and so on

Something you can do is to disable your button after a user click on them it also disable the postback behaviour and prevent future postback, in this way
protected void Unnamed1_Click(object sender, EventArgs e) {
YourButton.Enabled = false;
}

Related

How to avoid double clicking on a submit button in .NET

My c# web application has 2 panels. 1st panel is to enter some text.
The 2nd panel only shows after the 1st panel passes validation and the continue button is clicked.
The 2nd panel has a text box with 4 validations, a dropdown list box and a Submit button.
If the validation is good and the user clicks on he Submit button, I would like the Submit button to be disabled and change it's text to "Please wait..." to prevent the user from double clicking it.
I'm new to .NET so any help is greatly appreciated.
protected void BTNSubmit_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
BTNSubmit.Text = "Please wait...";
BTNSubmit.Enabled = false;
DoSomething();
}
}
This is something you will need to trap on the front end with javascript and asp.net's onclientclick attribute (which translates to javascript's onclick.)
An important key is that if your onclientclick returns false, your server event won't fire (which is what you want for the second click)
var submitted=false; //javascript variable to store if we have clicked submit yet
function ClientSubmit(obj){ //obj is your button
if(submitted) {return false;} //return false prevents server onclick from firing
submitted=true;
obj.value='Please Wait...';
obj.disabled = true;
return true;
}
Now the next time you click, your javascript will see that submitted is set to true, so this function will return false, and prevent the server event from firing
To implement this on your .aspx page
<asp:Button id="myButton" runat="server"
onclick="BTNSubmit_Click" onclientclick="return ClientSubmit(this);" Text="Submit"/>

Reset button c# asp.net and clear validation controls

I have a c# asp.net registration form , but i'm unable to use the reset button to achieve the objective I want. Upon clicking the reset button, the validators I have demand that I fill up ALL textboxes before I can reset the fields.
If a user were to fill up half of the form and use the reset fields, the reset button does not achieve the objective I want it to, as all textboxes have to be filled.
The codes I'm using are as follows:
protected void resetButton_Click(object sender, EventArgs e)
{Response.Redirect(Registration.aspx);}
Since this looks like Asp.Net Web Forms, as opposed to MVC, On the aspx file where you set up the button, set the CausesValidation property to false.
Link: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.causesvalidation(v=vs.110).aspx
Example:
<asp:Button CausesValidation="False" />
Add this to the server-side handler of the reset button:
Response.Redirect("~/Registration.aspx", true);
you can clear the modelstate on the controller. ModelState.Clear();

Why DropDownList event fires after another event

I have a DropDownList in my page:
<asp:DropDownList ID="ddlPra" ClientIDMode="Static" CssClass="chosen-select" runat="server" OnSelectedIndexChanged="Practice_SelectedIndexChanged"></asp:DropDownList>
Code Behind:
protected void Practice_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(ddlCli.SelectedItem.Text);
}
I also have an UpdatePanel which has a GridView that displays some data with links. The issue I am having is when the page loads and I change the option from the select drop down, I don't get an alert but when I click on anything inside theUpdatePanel` the alert is displayed.
How do I fix it so that the DropDownList works independent from the UpdatePanel
Why DropDownList event fires after another event?
Because you have not set AutoPostBack="true", it is false by default. That means that it will not post back immediately after the user selected another item. But the event will be triggered on the next postback anyway, independent of the control that caused it.

enable button in C# by removing 'disabled' property using firebug

I have a question about disable button (C#) that I need your help.
in Asp.net (C#), disable the button code:
Button btn = new Button();
btn.click += new EventHandler(btn_click);
btn.Enabled = false;
btn.UseSubmitBehavior = false;
The generated HTML:
<input type="button" disabled="disabled">
The button is disabled until I use firebug and remove the 'disabled' property and change the type property to submit (<input type="submit">) then user can click on btn and it can perform btn_click method(postback).
How could we prevent this issue? I try to use CommandName (disable, enable) to mark disable button and inside btn_click method, I check if CommandName== "disable" then stop the function but it is very messy.
Thanks for your help.
Van
Client can remove the Disabled attribute but cannot change the control ViewState. On server side you can do that:
protected void btn_Click(object sender, EventArgs e)
{
if (btn.Enabled)
{
// do something
}
}
<asp:Button ID="btn" runat="server" Enabled="false" OnClick="btn_Click" Text="Test" />
You can't control your users' behavior.What you need to do is handle these things in server-side..
you can judge the button's status in btn_click.. and then do some work
#bystander is right. You need to check on the server whether that condition is correct. You can't rely on the client being 100% fool proof, and that's the exact reason why.
Can you hide the control instead, and reenable it on some future postback? Hiding doesn't actually render the control to the client at all.

Button click event not firing within use control in ASP .Net

I am developing an asp web page in which I have a drop down combobox and a place holder below that. When the user selects an item from the drop down combobox, a postback is done to the server side and server loads an asp user control to the place holder in this parent page. Everything upto now is working fine.
In the user control I have a button and the user control code behind is implemented to handle the button click event. The problem is, when I click this button, I can see that the postback is send to the server side (i.e. parent page Page_Load() is invoked in debug mode), but both the user control's Page_Load() or button click event handler is not invoked.
Please help..
Some additional information,
My parent page is not an asp master page. Just a simple asp page.
I am using VS2008 and .Net 3.5 SP1 and C#.
You need to ensure that you UserControl exists so the button click event is triggered when viewstate is rebuilt.
Loading your UserControl in the Page_Load will work the first time. When you click the button and the post_back occurs, Page_Load has not occurred yet. This means the UserControl will not exist, which mean the button does not exist for the event to be wired back up. So the UserControl with the button in it cannot be connected to the click event and the click event wont fire.
Recommend that your user control is loaded in this event.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//-- Create your controls here
}
Try a sandbox test. In page_load, dynamically create a button with a click event in the Page_Load. You will see that the click event does not fire. Now move the button to the OnLoad event. The click event will fire. Also note, the click event will occur before the Page_Load event. Further proof that the button does not exist at the right time.
Another idea...
You are reloading the usercontrol on the page before the button event occurs. Ensure your LoadControl method is inside the If block
if (!IsPostBack)
{
//load usercontrol
}
Default.aspx
<asp:PlaceHolder runat="server" ID="ph1">
</asp:PlaceHolder>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
var ctl = LoadControl("Controls/UserControl.ascx");
ph1.Controls.Add(ctl);
}
UserControl.ascx
<h3>User control</h3>
<asp:Button ID="btn1" runat="server" OnClick="btn1_Click" Text ="Click me" />
UserControl.ascx.cs
protected void btn1_Click(object s, EventArgs e)
{
Response.Write("You clicked me, yay");
}
All works like a charm. I see the "You clicked me, yay" written when I click the button
Point of attention. If you try to load the controls dynamically in your example in the handler for SelectedItemChanged event of the dropdown control, it will fail, because of the way that lifecycle works for ASP.Net page.
Instead you should handle such control creation in the PageLoad event of the page, like this example below
Default.aspx
<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true">
<asp:ListItem Value="0" Text="--select a value--" />
<asp:ListItem Value="1" Text="User control 1" />
<asp:ListItem Value="2" Text="User control 2" />
</asp:DropDownList>
<asp:PlaceHolder runat="server" ID="ph1">
</asp:PlaceHolder>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
switch (ddl1.SelectedValue)
{
case "1":
var ctl = LoadControl("Controls/UserControl.ascx");
ph1.Controls.Add(ctl);
break;
case "2":
ctl = LoadControl("Controls/UserControl2.ascx");
ph1.Controls.Add(ctl);
break;
}
}
}
In my particular case, I found that the problem was the UserControl ID (or rather the lack of).
When the UserControl was first instantiated, my button ID was ctl00$ctl02$btnContinue, but after the postback it had changed to ctl00$ctl03$btnContinue, therefore the button event handler didn't fire.
I instead added my UserControl with a fixed ID and the button now always loads with the ID ctl00$myUserControl$btnContinue.

Categories