ASP.NET confirmation box showing twice - asp.net

I've searched for a way to display a confirmation box when a certain button is pressed.
The only problem I have, is that the confirmation box shows twice.
Code:
<dx:ASPxButton ID="btnDel" runat="server" onClick="btnDel_Click" Text="Delete">
and in Page_Load:
btnDel.Attributes.Add("onclick", "return confirm('Are you sure?');");

Change your Page_Load code to:
if (! IsPostback)
btnDel.Attributes.Add("onclick", "return confirm('Are you sure?');");
You only have to add the onclick attribute once at the first load of the page.

the button control you are using is devexpress button and it implements it's own ClientSideEventCollection in which you can add any javascript. you can do it like following
<dx:ASPxButton ID="btnDel" runat="server" onClick="btnDel_Click" Text="Delete">
<ClientSideEvents Click="function(s, e) {
e.processOnServer = confirm('Are sure to save data?');
}" />
</dx:ASPxButton>
Here e.processOnServer is a boolean which decides if the server trip should be executed, so we assigned the result of confirm to this boolean.
you can find more about ClientSideEvents on a dev express control, in the devexpress docs here

Related

ASP.NET Required Field Validator not working

Hi all I need a required field validator for my textbox..This is my textbox..
<asp:TextBox ID="txtTimeSlotGroupName" runat="server" AutoPostBack="false"
ClientIDMode="Static"></asp:TextBox>
<font color="red">*</font>
<asp:RequiredFieldValidator ID="RequiredFieldValidator_txtTimeSlotGroupName"
runat="server" ControlToValidate="txtTimeSlotGroupName" Display="None"
ErrorMessage="Timeslot Group Required!" ForeColor="Red" InitialValue="0"
ValidationGroup="TimeSlot"></asp:RequiredFieldValidator>
My button:
<asp:Button ID="btnAddTimeSlots" Text="Add Timeslots" CssClass="button"
runat="server" OnClick="btnAddTimeslots_Click" ValidationGroup="TimeSlot"
OnClientClick="javascript:shouldsubmit=true;"/>
I am not getting the error message. Any solutions?
You have to define the Validation Group Of your Textbox too....to make it work
<asp:TextBox ID="txtTimeSlotGroupName" runat="server"
AutoPostBack="false" ValidationGroup="TimeSlot" ClientIDMode="Static"></asp:TextBox>
Remove InitialValue="0" from the RequiredFieldValidator tag, it is not required when you are validating the textbox.
Even I was facing the same issue. Kindly check if any javascript are present on your page. Irrespective of above make use of Page.Validate() method and if(Page.IsValid) in your code. This will automatically force your validation controls and issue will be solved
If two objects have the same id the required field validator Does not work.
You just add ValidationGroup="TimeSlot" in textbox
<asp:TextBox ID="txtTimeSlotGroupName" runat="server" AutoPostBack="false"
ValidationGroup="TimeSlot" ClientIDMode="Static"></asp:TextBox>
I had this same issue... but none of the above answers were the fix for me...
My problem was that I was missing the Page.isValid in my button press method. Below is my button code and the method called by the button.
Button:
<asp:Button ID="btnBtmSave" runat="server" Text="Save" OnClick="btnSave_Click" BtnGroup="save" TabIndex="18" />
Button method:
protected void btnSave_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
//Logic goes here
}
}
make the same Validation Group Of all your text and Add button and Validation
ValidationGroup="AAA"
and add the code to your save button:
If (Page.IsValid) Then
YOURSQL.Insert()
'or ur code here'
End If
In my case, For button, I was using both client side validation i.e onClientClick="return validate()", and ASP.NET Validation i.e Reguired field Validation (ValidationGroup). Hence the Required field validators were not firing.

RequiredFieldValidator with ValidationSummary not working with enter key inside empty textbox

Consider the following ASPX:
<asp:ValidationSummary ID="vSummary" runat="server" CssClass="error-message" HeaderText="<p>Please correct the following errors with your profile.</p>" ShowMessageBox="false" DisplayMode="BulletList" ShowSummary="true" />
<asp:TextBox ID="txtTest" runat="server" ClientIDMode="Static"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfv" runat="server" Display="None" ErrorMessage="Enter a value in the textbox." ControlToValidate="txtTest"></asp:RequiredFieldValidator>
<asp:Button ID="btn1" runat="server" Text="Button 1" OnClick="btn1Click" ClientIDMode="Static" />
With text entered into the textbox, everything behaves as expected.
Clicking the button submits the form / pressing 'Enter' while inside the textbox submits the form.
However, when the textbox is empty, pressing 'enter' does nothing. Clicking the button will display the validation summary, as expected, but pressing 'enter' does not.
How can I make the validation summary display after the 'Enter' key is pressed inside an empty textbox?
For some reason when you hit enter error does not being displayed by ValidationSummary control. However, if you change in RequiredFieldValidator Display to "Dynamic" you will see error message.
Update: to overcome this problem try to follow instructions from this article.
For lazy ones:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// Add new attribute to form1 event to fire when enter key submit button click event
form1.Attributes.Add("onkeydown", "javascript: return WebForm_FireDefaultButton (event, '" + ButtonName.ClientID + "')");
// Allow you to use enter key for sumbit data
ClientScript.RegisterHiddenField("__EVENTTARGET", "ButtonName");
}
}
And finally:
// Add this code to div section on the form1 ASPX page.
<div id="inputArea" onkeypress="javascript:return WebForm_FireDefaultButton(event,'ButtonName')">
That behaviour is because your textbox is being validated but the validation message is not showing because you turned it off with Display = "none". It's doing the validation on client side and therefore, postback did not occur because of empty text.
If you remove the Validation control (which is not what you want) from the page, your text box will start posting back. I guess you don't want the message to show for each control, just in the validation summary, otherwise, that's the easiest way

Disable server side of asp.net button

How to disable button callback, I want to use this button on client side only?
<dx:ASPxButton ID="btn_clear" runat="server"
Text="Clear" Width="90px" OnClick="btn_clear_Click">
<ClientSideEvents Click = "OnClick" />
</dx:ASPxButton>
onClientClick=return false will prevent processing the normal postback. If you want to do some custome javascript at client side, you can call return false after that
<asp:Button id="btn1" runat="server" onClientClick="return MyFunction" />
And in javascript
function MyFunction()
{
//Do your custom code
return false;
}
Judging by your button tag prefix it looks as though you're using Devexpress components not a normal asp.net button. Devexpress' ASPxButton control client click event has a processOnServer property which you can set to false to prevent a postback:
<dx:ASPxButton ID="btn_clear" runat="server"
Text="Clear" Width="90px" OnClick="btn_clear_Click">
<ClientSideEvents Click = "OnClick" />
</dx:ASPxButton>
and your OnClick() javascript function:
function OnClick(s, e)
{
e.processOnServer = false;
}
Without using third party components, if you want a button to just do something client side, then just use a HTML input button but if you want to have the client side capabilities of the asp.net button at your disposal (such as causing validation) then Shyju's answer is the way to go.
Hwo about simply removing the OnClick Handler ?
<dx:ASPxButton ID="btn_clear" runat="server"
Text="Clear" Width="90px">
<ClientSideEvents Click = "OnClick" />
</dx:ASPxButton>
Or even better, just use a HTML button in the first place (<input type="button" />).
You can't.
Server side controls must run on the server side.
If you omit the runat="server" attribute, the markup will render exactly like this:
<dx:ASPxButton ID="btn_clear"
Text="Clear" Width="90px" OnClick="btn_clear_Click">
<ClientSideEvents Click = "OnClick" />
</dx:ASPxButton>
This will be completely ignored by the browser, as an element dx:ASPxButton is not a valid HTML element.
Just add an attribute AutoPostBack="false", this will stop the postback, still you need to call server side function using client side script, you can use callback panels

Problems with confirm on ASP.NET

This is very weird, i have an asp:ImageButton inside a list view and i want to confirm and action before i execute the method but i can't
then i created another imagebutton outside the list view and the confirm does work can u guys tell me why?
this doesn't work
<asp:ImageButton ID="btnEnabled" OnCommand="CommandExecution" OnClientClick="return confirm('Desea eliminar el cliente ?');" ImageUrl="~/App_Themes/Default/images/Habilitar.png"
Visible='<%# Eval("IsEnabled") %>' CommandName="ChangeStatus" ToolTip="Deshabilitar distribuidor"
runat="server" CommandArgument='<%# Eval("IdClient") %>' />
this one does
<asp:ImageButton ID="btnConfirmacion3" ImageUrl="~/App_Themes/Default/images/Habilitar.png" runat="server" Text="Confirmacion 3" OnClientClick="return confirm('Desea eliminar el cliente ?');" />
Set AutoPostback to false. then create two hidden textboxes for command name and params. then place a hidden linkbutton in page. in onclientclick event of your image buttons after confirm place command name and params in hidden boxes and then call postback method of link button. then handle command in link button event handler.

Postback problem when PopupExtender is placed inside a user control

I am creating a ModalPopupExtender inside a Web User Control.
When i click on the OK Button in the panel, which is showing as model popup, the Event Handeler of the button is not executing.
This problen does not occure when i do not use the Web User Control.
Here is the user control (.ascx) file code.
<script type="text/javascript" language="javascript">
function OkClicked(sender, e) {
__doPostBack('Button1', e);
}
</script>
<asp:Button ID="Button2" runat="server" Text="Show" />
<asp:Panel ID="Panel1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</asp:Panel>
<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
DropShadow="True" OkControlID="Button1" PopupControlID="Panel1"
TargetControlID="Button2" onokscript="OkClicked()">
</asp:ModalPopupExtender>
<p>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</p>
And the Event Handeler for the click event of the 'Button1' is
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = TextBox1.Text;
}
In the javascript you shouldn't put 'Button1' as the name of the control. Instead, on the PreRender event of your control, fill that out with this.Button1.ClientID .
ClientID is the unique identifier across the entire generated page of your button control, allowing the server to pinpoint exactly what control triggered the postback.
If this wasn't like that, you wouldn't be able to place multiple instances of a same control on one page.
In code:
<script type="text/javascript" language="javascript">
function OkClicked(sender, e) {
__doPostBack('<%= this.Button1.ClientID %>', e);
}
Couple of suggestions:
Do you have any kind of validation on this page. If so, then it's possible that when you click the ok button, that validation is failing. When you click the button, likely the ModalPopup Extender will close, and if validation fails it may cancel the event happening. If this is the case, add an attribute: CausesValidation="false"
If that doesn't work, you may add an attribute to MAKE it post back, I believe there's an attribute -> AutoPostBack="true".
#Joachim is correct that you'll need to use the clientID, but at the same time, I don't think you'll need to call javascript to run the backend code.
Also, you may consider putting this into an UpdatePanel so that you do an AJAX postback without sending the entire page back and forth when the page is posted back.

Resources