AJAX :: Why Buttons OnClick Event Only Fire 2nd Time Round
Mar 11, 2010
Basically I am using a ModalPopUpExtender and it works fine, except that the OK button has an OnClick event that only fires when it is clicked for the 2nd time.. obviously i can progress with populating my OnClick event method for later on - its just annoying that a user has to click my button then ok in the pop up twice before they can get their intended result!
I have developed a web application which contains aspdotnet treeview control. In this treeview control has binded with some database value.. that controls has one parent node and more than one child nodes for each parent node.
my problem is here, when the user clicks the parent node, I need to fire a javascript onclick function before the server side event(SelectedNodeChanged) called..
If I provide javascript to the parnet node when it is binding, then I could not fire the server side event(SelectedNodeChanged).
How to provide onclick javascript event for parent node in treeview control even the parent node has SelectedNodeChanged event.
MdsMenu:MenuItem is my custom WebControl. If I insert a Button control out of MdsMenu:MenuItem tag it works well but if I inserted it within MdsMenu:MenuItem tag it doesn't fire the concerned method. What's wrong with my code?
Edit: Menu.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; using System.Collections; using System.ComponentModel.Design; using System.Drawing.Design; using System.Web.UI.HtmlControls; using System.IO; namespace MenuServerControl { [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] [DefaultProperty("MenuItems")] [ParseChildren(true, "MenuItems")] [ToolboxData("<{0}:Menu runat="server"> </{0}:Menu>")] public class Menu : WebControl { #region Fields private List<MenuItem> _MenuItems; string _Direction { get { string direction = ""; switch (this.Direction) { case Directions.LeftToRight: direction = "direction:ltr;"; break; case Directions.RightToLeft: direction = "direction:rtl;"; break; default: direction = "direction:rtl;"; break; } return direction; } } string _AnimationDelay { get { if (AnimationDelay == null) AnimationDelay = 1000; return AnimationDelay.ToString().ToLower(); } } string _AnimationType { get { switch (this.AnimationType) { case AnimationType.Opacity_Height: return "animation:{opacity:'show',height:'show'}"; case AnimationType.Opacity_Width: return "animation:{opacity:'show',width:'show'}"; case AnimationType.Opacity: return "animation:{opacity:'show'}"; case AnimationType.Height: return "animation:{height:'show'}"; case AnimationType.Width: return "animation:{width:'show'}"; case AnimationType.Height_Toggle: return "animation: {height: 'toggle'}"; case AnimationType.Width_Toggle: return "animation: {width: 'toggle'}"; default: return "animation:{opacity:'show',height:'show'}"; } } } string _AnimationSpeed { get { switch (this.AnimationSpeed) { case AnimationSpeed.Fast: return "speed:'fast'"; case AnimationSpeed.Normal: return "speed:'normal'"; case AnimationSpeed.Slow: return "speed:'slow'"; default: return "speed:'fast'"; } } } string FloatStyle { get { if (Direction == Directions.RightToLeft) return "float:right;"; else return ""; } } string _Main_ul_CssClass = ""; #endregion #region Properties public string Main_ul_CssClass { get { if (string.IsNullOrEmpty(_Main_ul_CssClass)) return ""; _Main_ul_CssClass = "class=" + _Main_ul_CssClass; return _Main_ul_CssClass; } set { _Main_ul_CssClass = value.Trim(); } } public Directions Direction { get; set; } public int? AnimationDelay { get; set; } public AnimationType AnimationType { get; set; } public AnimationSpeed AnimationSpeed { get; set; } public bool DropShadow { get; set; } public bool AutoArrows { get; set; } [Category("Behavior")] [Description("The menu collection")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [PersistenceMode(PersistenceMode.InnerDefaultProperty)] public List<MenuItem> MenuItems { get { if (_MenuItems == null) _MenuItems = new List<MenuItem>(); return _MenuItems; } } public VerOrHor VerticalOrHorizontal { get; set; } #endregion #region Methods public Menu() { DropShadow = true; AutoArrows = true; } public override void RenderBeginTag(HtmlTextWriter writer) { writer.Write("<div id="" + this.ID + "" style="" + _Direction + " " + FloatStyle + "">"); } public override void RenderEndTag(HtmlTextWriter writer) { writer.Write("</div>"); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); #region Adding Script & link Tags HtmlGenericControl jquery = new HtmlGenericControl("script"); jquery.Attributes.Add("type", "text/javascript"); jquery.Attributes.Add("src", Page.ClientScript.GetWebResourceUrl(typeof(MenuServerControl.Menu), "MenuServerControl.JavaScriptFiles.jquery_1_4_3.js")); jquery.EnableViewState = false; Page.Header.Controls.Add(jquery); HtmlGenericControl hoverIntent = new HtmlGenericControl("script"); hoverIntent.Attributes.Add("type", "text/javascript"); hoverIntent.Attributes.Add("src", Page.ClientScript.GetWebResourceUrl(typeof(Menu), "MenuServerControl.JavaScriptFiles.hoverIntent.js")); hoverIntent.EnableViewState = false; Page.Header.Controls.Add(hoverIntent); HtmlGenericControl jquery_bgiframe_min = new HtmlGenericControl("script"); jquery_bgiframe_min.Attributes.Add("type", "text/javascript"); jquery_bgiframe_min.Attributes.Add("src", Page.ClientScript.GetWebResourceUrl(typeof(Menu), "MenuServerControl.JavaScriptFiles.jquery_bgiframe_min.js")); jquery_bgiframe_min.EnableViewState = false; Page.Header.Controls.Add(jquery_bgiframe_min); HtmlGenericControl superfish = new HtmlGenericControl("script"); superfish.Attributes.Add("type", "text/javascript"); superfish.Attributes.Add("src", Page.ClientScript.GetWebResourceUrl(typeof(Menu), "MenuServerControl.JavaScriptFiles.superfish.js")); superfish.EnableViewState = false; Page.Header.Controls.Add(superfish); HtmlGenericControl supersubs = new HtmlGenericControl("script"); supersubs.Attributes.Add("type", "text/javascript"); supersubs.Attributes.Add("src", Page.ClientScript.GetWebResourceUrl(typeof(Menu), "MenuServerControl.JavaScriptFiles.supersubs.js")); supersubs.EnableViewState = false; Page.Header.Controls.Add(supersubs); if (Direction == Directions.LeftToRight) { HtmlGenericControl csslink = new HtmlGenericControl("link"); csslink.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl (typeof(Menu), "MenuServerControl.CSS.superfish.css")); csslink.ID = "NavigationMenu"; csslink.Attributes.Add("type", "text/css"); csslink.Attributes.Add("rel", "stylesheet"); csslink.EnableViewState = false; Page.Header.Controls.Add(csslink); } else { HtmlGenericControl csslink = new HtmlGenericControl("link"); csslink.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl (typeof(Menu), "MenuServerControl.CSS.RightToLeft superfish.css")); csslink.ID = "NavigationMenu"; csslink.Attributes.Add("type", "text/css"); csslink.Attributes.Add("rel", "stylesheet"); csslink.EnableViewState = false; Page.Header.Controls.Add(csslink); } if (this.VerticalOrHorizontal == VerOrHor.Vertical && this.Direction == Directions.RightToLeft) { HtmlGenericControl csslink01 = new HtmlGenericControl("link"); csslink01.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl (typeof(Menu), "MenuServerControl.CSS.RightToLeft superfish-vertical.css")); csslink01.Attributes.Add("type", "text/css"); csslink01.Attributes.Add("rel", "stylesheet"); csslink01.EnableViewState = false; Page.Header.Controls.Add(csslink01); } else if (this.VerticalOrHorizontal == VerOrHor.Vertical) { HtmlGenericControl csslink01 = new HtmlGenericControl("link"); csslink01.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl (typeof(Menu), "MenuServerControl.CSS.superfish-vertical.css")); csslink01.Attributes.Add("type", "text/css"); csslink01.Attributes.Add("rel", "stylesheet"); csslink01.EnableViewState = false; Page.Header.Controls.Add(csslink01); } #endregion } protected override void RenderContents(HtmlTextWriter output) { output.Write(CreateMenuHtmlTags()); } StringBuilder CreateMenuHtmlTags() { if (this._MenuItems == null) throw new Exception("تگ های مربوط به منو را کامل کنید"); StringBuilder Html = new StringBuilder(""); #region Add <Script> if (String.IsNullOrEmpty(Main_ul_CssClass)) Html.Append("<script>$(document).ready(function() { $("ul.sf-menu").superfish({pathLevels: 1,"); else Html.Append("<script>$(document).ready(function() { $("ul." + Main_ul_CssClass + "").superfish({ pathLevels: 1,"); Html.Append("delay:" + _AnimationDelay + ","); Html.Append(_AnimationType + ","); Html.Append(_AnimationSpeed + ","); Html.Append("dropShadows: " + DropShadow.ToString().ToLower() + ","); Html.Append(@"autoArrows: " + AutoArrows.ToString().ToLower() + "});});</script>"); #endregion if (string.IsNullOrEmpty(Main_ul_CssClass) && VerticalOrHorizontal == VerOrHor.Vertical) Html.Append("<ul class="sf-menu sf-vertical sf-js-enabled sf-shadow" id='sample-menu-1'>"); else if (String.IsNullOrEmpty(Main_ul_CssClass)) Html.Append("<ul class="sf-menu sf-js-enabled sf-shadow" id='sample-menu-1'>"); else Html.Append("<ul class="" + Main_ul_CssClass + "" id='sample-menu-1'>"); foreach (MenuItem item in _MenuItems) { if (item == null) continue; if (item.SubMenuItems != null && item.SubMenuItems.Count > 0) { Html.Append("<li" + item.li_CssClass + ">"); Html.Append("<a href="" + item.Href + "">" + item.Text.Trim() + "</a>"); ParseSubMenuItems(ref Html, item); Html.Append("</li>"); } else if (item.SubMenuItems != null) Html.Append("<li" + item.li_CssClass + "><a href="" + item.Href + "">" + item.Text.Trim() + "</a></li>"); } Html.Append("</ul>"); return Html; } void ParseSubMenuItems(ref StringBuilder Html, MenuItem menuItems) { if (menuItems == null) return; Html.Append("<ul " + menuItems.ul_CssClass + " style="display: none; visibility: hidden;">"); foreach (var item in menuItems.SubMenuItems) { if (item == null) continue; MenuItem Sub_MenuItem = item as MenuItem; WebControl webControl = item as WebControl; if (Sub_MenuItem != null) { if (Sub_MenuItem.SubMenuItems != null && Sub_MenuItem.SubMenuItems.Count > 0) { Html.Append("<li" + Sub_MenuItem.li_CssClass + ">"); Html.Append("<a href="" + Sub_MenuItem.Href + "">" + Sub_MenuItem.Text.Trim() + "</a>"); ParseSubMenuItems(ref Html, Sub_MenuItem); Html.Append("</li>"); } else if (Sub_MenuItem.SubMenuItems != null) Html.Append("<li" + Sub_MenuItem.li_CssClass + "><a href="" + Sub_MenuItem.Href + "">" + Sub_MenuItem.Text.Trim() + "</a></li>"); } else if (webControl != null) { Html.Append("<li>"); webControl.EnableViewState = true; this.Controls.Add(webControl); webControl.EnableViewState = true; StringBuilder sb = new StringBuilder(); sb.Append("<div>"); using (StringWriter sw = new StringWriter(sb)) { using (HtmlTextWriter textWriter = new HtmlTextWriter(sw)) { webControl.RenderControl(textWriter); } } sb.Append("</div>"); Html.Append(sb.ToString()); Html.Append("</li>"); } } Html.Append("</ul>"); } #endregion } } MenuItem.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections; namespace MenuServerControl { [DefaultProperty("SubMenuItems")] [ParseChildren(true, "SubMenuItems")] [TypeConverter(typeof(ExpandableObjectConverter))] public class MenuItem : INamingContainer { #region Fields ArrayList _SubMenuItems; string text = ""; string href = "#"; string _ul_CssClass = ""; string _li_CssClass = ""; #endregion #region Properties [Description("متن منو آیتم")] [DefaultValue("")] [NotifyParentProperty(true)] public string Text { get { return text; } set { text = value; } } [DefaultValue("#")] [Description("<a /> href attribute")] [NotifyParentProperty(true)] public string Href { get { return href; } set { href = value; } } [DefaultValue("")] [Description("<ul /> css class")] [NotifyParentProperty(true)] public string ul_CssClass { get { if (string.IsNullOrEmpty(_ul_CssClass)) return ""; _ul_CssClass = " class="" + _ul_CssClass + """; return _ul_CssClass; } set { this._ul_CssClass = value.Trim(); } } [DefaultValue("")] [Description("<li /> css class")] [NotifyParentProperty(true)] public string li_CssClass { get { if (string.IsNullOrEmpty(_li_CssClass)) return ""; _li_CssClass = " class="" + _li_CssClass + """; return _li_CssClass; } set { this._li_CssClass = value.Trim(); } } [Category("Behavior")] [Description("The MenuItems collection")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [PersistenceMode(PersistenceMode.InnerDefaultProperty)] public ArrayList SubMenuItems { get { if (_SubMenuItems == null) _SubMenuItems = new ArrayList(); return _SubMenuItems; } } #endregion } }
I have an repeater with two buttons. I tried two different ways to make a click event on the two buttons. Neither of the two ways function. They do both the same. No errors but the repeaters content disappear.
My repeater:
[Code]....
As you can see, onbtnForumGroupsDebateListEditDebateAdm I tried to use the repeaters ItemCommand
the code for this here:
[Code]....
Then I tried to do a simple OnCommand instead
The code for this is:
[Code]....
I tried to make a "run to curser" and can see, that I don't get into the functions.
i have two nested gridview inside an update panel. there is a button called btnPhoneEdit inside the child grid view. when the button gets clicked, it do cause partial post back as expected but it fails to invoke btnPhoneEdit_Click.
here is how my grid view looks like and how i add my custom data source to both parent and child grid view. [Code]....
I have a link button in a repeater control. the li element is drag and droppable using jquery. when the page loads the the link button works perfectly, the jquery that is attached and the server side code both execute. when I perform a drag and drop then click on the link button it doesnt not fire. when i click it a second time it does fire. If i perform 2 or drag and drops in a row the link button doesnt fire a as many drag adn drops as i before it will fire. for example if if perform 3 drag and drops then it will take about 3 click before the events are fired.
How do I setup a default setting so that if I do not set an OnClick (i.e the asp.net OnClick attribute) explicitly for an asp:LinkButton tag, it will not render an onclick(html attribute for javascript) attribute client side? By default, asp.net adds an onclick='doPostBack....' for the LinkButton.
Case for use:
There is a LinkButton tag on the page. For this page, if the user has one friend, I only want to run client side code if the button is clicked and would not for any reason want to make a post back. If the user has more than one friend I would want a click to trigger a postback.
Using any asp.net Ajaxtoolkit
Dynamically switching the control type (i.e. if friends == 1 use a asp:Hyperlink)
-I want to avoid this because it is not scalable. There might be many cases where I want an asp:Link tag to do a postback or to not do a postback depending on the user context or user attributes Using OnClientClick (I am using jQuery would like to avoid this)
I am fairly new to the asp.net and experimenting with it to learn the page life cycle. Here is a problem that I have been unable to resolve for past few days.
I have a hosting page (.aspx). Then I have two user controls (.ascx). The page has a place holder control in which it loads the user controls one at a time based on the application flow. First user control is loaded on application start up. It has a "continue" button. Continue button click loads the Second user control that has two buttons - "Back" and "Submit". Obviously the "Back" button should load the first user control again and Submit button should submit the form data. Pretty simple.
The problem is that the command button event handler that I have on the second user control is not firing the first time. (I have one event handler for both buttons). The load event of the user control fires but then it ignores the button click. If I click it again, then it fires. I re-load the controls on the page in every page_load. Here is some relevent code:
AddPlayer.aspx:
[Code]....
The page_Load fires every time but "CommandBtn_Click" doesn't fire after the first click. I have to do it click it again. It doesn't matter which order I click the buttons.
When i Click Twice in Calendar Cell Date That Make The Event Fire only one time for the first click but the second click not fire the Event CalendarSelectionChanged ... In my Logic i want The Event Fired every Click Even if the clicks happened on the same Cell.
I am fairly new to the asp.net and experimenting with it to learn the page life cycle. Here is a problem that I have been unable to resolve for past few days.I have a hosting page (.aspx). Then I have two user controls (.ascx). The page has a place holder control in which it loads the user controls one at a time based on the application flow. First user control is loaded on application start up. It has a "continue" button. Continue button click loads the Second user control that has two buttons - "Back" and "Submit". Obviously the "Back" button should load the first user control again and Submit button should submit the form data.
Who knows how to add onClick event to accordion pane in Ajax asp accordion ? Is it the same as adding it as attribute in server side or there is another way in client side?
I did some research and found two lines of code that would make the page postback. But, the method is not being called for the button. how to fire the onclick event with using ModalPopupExtender.
I have two problems with a databound AJAX Accordion. The Accordion looks like this:
[Code]....
The code behind has this subroutine:
[Code]....
[Code]....
The first problem I'm having is that this subroutine is not fired (I have a breakpoint in it) when the LinkButton inside the accordion is clicked. The Page_Load event fires and there is no error message, javascript errors, etc, but nothing else happens.
The second problem is that I'm not sure how to go backwards with the databind. I want to be able to make use of the UpdateMethod in the ObjectDataSource because I also have textboxes inside the accordion. I will have a Save subroutine that can be called but I'm not sure what code to put inside it.
I need to achieve an effect of a read-only textbox, where when the user clicks on the textbox a popup grid control appears, after the user has made a row selection the text box is populated.... Looking at the AJAX Toolkit model it seems like a CustomExtender would be the way to go, but I can find no documentation on how to build such a thing, so I am looking at improvising.
Here is my process (which is still not working):
Using either an ASP.NET TextBox or HTML <input type="text" runat="server"> control I need to able to trap on the onclick event and then set an ASP.NET Panel control Visible="true". I have tried placing my GridView control inside a <div> and using style properties to set it to hidden and using a client-side (javascript) event handler on <input type="text"> onclick event setting the style property to visible, this does not work correctly. It results in a empty place-holder like grid that popualtes on click (I suspect this is because the DataGridView lives inside a ASP.NET Panel)
I would like to be able to call a server-side method from inside my client-side JavaScript function. I seem to recall from Microsoft AJAX 1.0 docs a way to RegisterClientScript or some approach that allows this and can not find anything on this being supported with the ControlToolkit/MS AJAX 2. If I can do this I could set my ASP.NET Panel Visible property to true and then call Update() on it's UpdatePanel parent which should give me exactly what I'm looking for.
I have a web page which has both asp.net controls as well as AJAX controls.I am facing a weird issue when I introduce some AJAX controls(Modal popup) inside a tabbed panel, the button onClick event stops firing.
i want to open new window ,but i dont want to provide url link in script because i want to hide this link from user.so is there any method to get URL from server and fire event to open new window after cliking button which has some server logic on that basis serever return URL.
I have a modalpopup extender attached to a button. That is to say the button is the targetcontrol id of the modalpopupsxtender. I would still like the onclick event of that button to work because only the onclient click event is working. How can i go about this.
I have a multi view with 2 view in my page. when page is loading first view is set active. by click on a click I set active second view that contain AsyncFileUpload1. but UploadedComplete event doesn't fire. This control works outside of view correctly but into view doesn't work. I have to use multi view and this 2 view in my web page. what can I do?
using the abovei have a master page used the above in conetnt page in update panelwhen when i click on btnYes the event is not firedi even trued using trigger in code behind & even in design mode but still its not workingi get a msg <asp: content> tag
How can I fire a ModalPopupExtender on the SelectIndexChanged event of a dropdownlist?
I only want it to fire when a particular value is chosen in the list.
I tried leaving the PopupControlID value out and calling .Show() on my extender in the onselectchanged event, but it would not allow me to have a blank PopupControlID. If I set the PopupControlID to the ID of my dropdownlist, the popup fires as soon as I click on the dropdownlist control.
I have my ReorderList setup, and it seems to work. It doesn't give me any errors, and it allows drag/drop of the entries.
BUT, it never updates my datasource. I have tried putting breakpoints on the update events, both on the reorder list, but also on the datasource, none fires.