asp.net detect DropDownList.SelectedIndexChanged after Button Click (JS disabled) - asp.net

I have a DropDownList which is connected to a TextBox. When the event SelectedIndexChanged is fired, the text in the Textbox changes. The content of the textbox can also be changed by user input. At the end of the page the user has to submit the data (button).
When javascript is enabled everything works fine, but I have also users where javascript is disabled.
Without javascript the SelectedIndexChanged event of the DropDownList gets called after the Button-Click (before the Click-Event of the button is processed). The user input to the textbox gets overwritten by the SelectedIndexChanged event.
How can I detect in Code behind if the SelectedIndexChanged event was triggerd by the button click? How can I get the text of the textbox changed by the user?
EDIT:
Can I use the property IsPostBackEventControlRegistered? This always seems to be true when I click the button, but is false in SelectedIndexChanged event.

Well, it IS possible, but not easy. You would essentially need to track whether javascript is enabled by using a hidden field, do something like:
<asp:HiddenField ID="JSEnabled" runat="server" ClientIDMode="Status" Value="F" />
<script type="text/javascript">
function checkForJavaScript() {
$("#JSEnabled").val("T");
}
</script>
You call this script from window.onload or jquery.ready event, whatever JS option you like, and this can tell you whether you have JS enabled to do the selectedindexchanged event, or if a button triggered it because JS wasn't enabled. To tell whether the button was clicked and caused the postback, you can check the:
Request.Form.Get("__EVENTTARGET")
Field and see if the ID matches the UniqueID of the button. Every control in ASP.NET sets its ID (usually, but not always, for certain reasons) here. Although, I'm not sure, you may have to set UseSubmitBehavior="False" for that to happen. A hidden field can be manipulated, so it's not fullproof.
The question you should ask is do you really need that complexity?

Related

Disable Postback on asp.net Button Click

I would like to disable postback on a onClick event of a button.
I did some research online and most are using onClientClick and using javascript. Is there a way to call a asp.net function "btnCommit_Click" on the onClick instead of using onclientclick and using javascript?
If not, how would I be able to incorporate a asp.net function with javascript?
<asp:Button ID="btnCommit" runat="server" Text="Save" TabIndex="5"
onclick="btnCommit_Click" />
UPDATED
I have a GridView which contains checkboxes, once the user makes their changes and click on a "Save Button" a Post Back occurs and I loose all the selections made to the checkboxes I was thinking of disabling the postback on the OnClick Event of the button would solve that issue...
I didn't exactly get what you are trying to achieve. But if you want to have both js and server-side to gether on an asp.net button, use OnClientClick and Onclick together. if you want to cancel the postback, return false in the OnClientClick js function. This way, the server-side OnClick event will never be called. otherwise, return true and the postback will occur.
Update:
Based on the comments and you update, if you want to persist the state of checkboxes in your gridview, you have to avoid overwriting anything that can affect you controls' states in the Page_Load event. What this simply means that you have to check for (IsPostback) in Page_Load event, and if it's true, you shouldn't do anything on your UI elements or you will lose their states.
Sounds like your problem is not putting your databinding and page setup inside a check for first page load.
http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx
private void Page_Load()
{
if (!IsPostBack)
{
// Do your databinding etc here to stop it occuring during postback
}
}
I have a GridView which contains checkboxes, once the user makes their
changes and click on a "Save Button" a Post Back occurs and I loose
all the selections made to the checkboxes
You have to keep the Page_Load under Page.IsPostback during is's value to false like below..
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//Your code
}
}
This will not cause to loose you grid checkbox selection made after clicking the button.
Your GridView EnableViewState must be True
Your template fields must be in designer page
While you can use VBScript with Internet Explorer only (I don't believe any other browsers support it), it is considered bad practice. To run VB/C#.net, you have to do some sort of postback/callback to the server. Other than that, use Javascript.
Dont use Autopostback=true to any form controls,if you want to send the form data to the server side function
*Form Page*
asp:Button ID="btn" runat="server" Text="Post Scrap" OnClick="btn_Click"
*Server side*
Sub btn_Click()
//code here
End Sub
In most of my cases, what I do is convert the button to an
<input type='button' />
so that I can access it via javascript or jquery. This may not be your case tough.
If you dont want to page load or postback a page when click on asp button, you just have to change a property called CausesValidation to false.

.Net textbox is null when a "submit" link is clicked

Good day,
I have a problem in a .NET page where I am using an asp:textbox in combination with an OnClick action on a link button.
What happens is that after text has been entered into the textbox, if you directly click on the link button, more often than not the textbox is considered to be null.
If you click off the text box first then click the link, all is well and the save function performed by the link button proceeds as expected.
My assumption is that there is a lifecycle event that is being missed, or not applied which is not binding the text to the textbox for use in the codebehind when the link button is clicked.
The question is, what can i do to enforce that binding short of doing something like adding an onkeypress event to the textbox to force a postback.
There must be a more elegant solution.
Thank you in advance for your help.
Do you have initializations on your textbox inside Page_Load event? If so, use IsPostBack=false and put the initialization inside.
If IsPostBack =False Then
TextBox1.text=""
End If

asp.net textbox - client side textChanged event won't fire

i want my textbox to fire a textChanged client side (JS) event when a text is changed inside it.
i read many posts about it. most of them are talking about a code-behind event and the ones that talk about the client side tells to add attribute of onchange:
<asp:TextBox runat="server" ID="TextBox1" onchange="javascript: ontextchanged();"></asp:TextBox>
but this event only fires when i lose the focus on the textbox.
what is the solution to this ?
how can i fire a JS function each time a text is changed inside the textbox?
Use onkeyup or onkeydown instead.
This will then run the function when you type or click on the textbox. You can also then detect the keycode of the event, and prevent the function if you dont want it to run for certain keys.
Try this http://www.zurb.com/playground/jquery-text-change-custom-event

Fire Textbox.TextChange event without a button click

I want to call Textbox.OnTextChange event without having to click a submit button or any button. How can I do this? As I enter text in the textbox, I want the ontextchange event to fire.
I would elaborate this further.I've a function for validating my entry in textbox which I'm calling ontextchange property.Now this function should be called without me changing focus from my textbox.
You can use onkeypress , onkeyup and onkeydown events for this.
http://www.w3schools.com/tags/tag_input.asp
Example :
<asp:TextBox ID="TextBox1" runat="server" onKeyPress="javascript:alert('Key Pressed');"></asp:TextBox>
you can set AutoPostBack to true on the textbox control. when the client side change event fires (when the focus changes from the textbox to something else), the page will do a postback automatically.
If you want a postback:
You want to use the onkeypress or onkeyup javascript event to run the __doPostBack javascript method. __doPostPack has some parameters you will need to look up on msdn
Otherwise just use the onkeypress or onkeyup javascript event to do whatever else it is you need with javascript.

calling __dopPostback from javascript where target control is an ASP.Net custom control

I need to pop up a jquery dialog as confirmation before a submit happens. I don't want the dialog to always pop up, that depends upon the setting of a dropdown.
The submitting control (which I can't change by the way) is a custom control with a save and a cancel button and handlers for the save and cancel buttons.
So when the user has selected a particular item from the drop down I hook up the click event (on the clientside) of the save button (that has been rendered by the custom control) to a js function using jQuery, that calls my showDialog() function and then returns false (to prevent the postback).
I now need, when the user clicks the yes button on the dialog, to call __doPostBack to get the SaveButtons serverside events to fire and to get the serverrside validation to run.
I've got
eval($("#<%= hdnBtnPostback.ClientID %>").val());
in the handler for the Yes button on the dialog.
The hdnPostBack field contains the result of:
Page.ClientScript.GetPostBackEventReference(mySaveCancelCustomControl, String.Empty)
Unsuprisingly this isn't working. The mySaveCancelCustomControl is the custom control mentioned above and it has two buttons that are rendered with two event handlers so the GetPostBackEventReference is doomed to fail.
Any ideas what I should do?
You can make the button a dialog button and put a asp.net button on the page with the ID of HiddenButton and wrap it in a div with a style of display:none; so the button is not visible. (Must not be Visible="false" so the button is rendered)
In the dialog javascript add a button that has the effect of clicking the hidden button
jQuery("#dialog").dialog({
buttons: {
'ButtonText': function() {
__doPostBack('<%# HiddenButton.ClientID %>', '')
jQuery(this).dialog('close');
}
}
});
and add a asp click handler to the hidden button
<div style="display:none;">
<asp:Button ID="HiddenButton" OnClick="HiddenButton_Click" ></Button>
<div>
Click event (HiddenButton_Click) on the serverside will fire when the dialog button is clicked
Hope this helps I use this pattern all the time
ps If ClientID does not work in the __doPostback() call user UniqueID I cant remember which it is.
When you are wiring up your new click on the client side, could you save the current click method into a temporary variable and then call the temporary variable from your Yes button?

Resources