AJAX :: Run A Function Associated With Custom Control After It Is Initialized?
Mar 31, 2010
How do I run a function associated with my custom control after it is initialized? So for example, after the control has initialized (ie is loaded) I need to finalize some properties. But since it is composed of a number of other controls, I need to know all the controls are present. I've tried add_load but I can't seem to get the context right to see my contol's specific functions. If I place the onLoad metod in the main class (javascript) definition, the contol id dosen't exist yet, same for in the prototype.
Since the control id dosen't exist yet I need to wait for the load event but now i'm in a chicken and egg problem. How do I create a method of my control class and call it "after" initilization? Seems like a simple question but it hasn't been so easy to find an answer.
I have an ASP.net control that contains a grid (protected member variable). Grid is populated from a function in the control. I have derived a new user control from this control without any control in it. I added additional functionality to populate grid and called base class function to do further operation on the grid. When I run my code, I get the null reference exception on grid object in the base control. I missing something in control inheritance? at what point do inner controls get created?
I have defined a web service function for AutoCompleteExtender, but in addition to the two parameters passed "prefixText" and "count" i want to pass another parameter for a label in that function. So, how to define that ?
I'm loading a .aspx page via fancybox (ajax loading mode).I was using fancybox 1.2.6, working fine, then upgraded to fancybox 1.3.4 and IE now triggers the JS error above (in the subject of the post). Then why am I posting on ASP.net forum you might ask?!?... read on...Debugging the JS code, the error happens inside jQuery in the .html(data) function where it does a evalScript .each scripts inside data. jQuery version is 1.4.2.I'm able to resolve the problem by editing fancybox-1.3.4.js at line 265. I just use innerHTML to circuvent the evalScript that occurs inside html()... and it works:
//tmp.html( data ); <-- original code commented out where JS error occured var tmpDiv = tmp.get(0); <-- new "plaster" kind-of fix tmpDiv.innerHTML = data; <-- new "plaster" kind-of fix
Why I'm posting on ASP.net and not on jQuery nor fancybox groups is that I consider that the proper fix would be in the .aspx that is loaded via ajax.To summarize the problem. There is a base .aspx page that has a couples of text and buttons. When you click a button, it loads via AJAX a new .aspx page (using fancybox). You end up with two ScriptManager js code and it triggers an error when executing :
I need to configure a property of a custom control I wrote, specifically before the control calls OnInit. If I assign it as part of the ASPX file, it naturally works, but if I instead move the assignment to different parts of the code-behind, it will throw an error for having an empty and invalid value. The following is what it looks like when functional in the ASPX page.
The property in question is FilterString, which is just a simple string. It should be noted as well that the FieldName property (inheritted from the control's base class "BaseFieldControl") would also throw an error if it is not initialized, but if I set FieldName in the code behind's OnInit method, it works correctly. FilterString is not so, it won't actually be assigned. So I know that some methods for certain properties will work for setting the property's value, but it won't always work. I tried placing it in OnPreInit as well, to no avail.
I am taking a dynamic assignment approach because the functionality of this page needs to be replicated for a number of different lists, and the FilterString and FieldName properties will differ in every case. Rather than write half a dozen mostly-identical aspx pages all with the same code behind but differing just in what those two properties are, I figured it would be wiser to use the page's query string and some derived parameters to set those properties dynamically. As such, what methods are available to accomplish this task?
When I implement Custom web control inheriting ASP.NET Menu Ajax is not working. I try to Override Render method and generate Li's rather than table.I try to use Control Adapters, but when I am not using adapters for some pages ithe base adapter is generating just hyperlinks with span. I do not want this way. So I can not use these.
I created the accordion control custom dll and added the dll my project reference. After adding the reference in my project, I just the drag and drop accordion control and added accordion panes, after adding the pane and clicked design view I am getting the following error. Even I added the selected index=0 properties also but I am getting same error
"Panes could not be initialized. Details: Pane could not be added to the collection. Details Object does not match target type.
public partial class AjaxUC : System.Web.UI.UserControl { private ITemplate _content = null; [TemplateInstance(TemplateInstance.Single)] [TemplateContainer(typeof(Container))] [PersistenceMode(PersistenceMode.InnerProperty)] public ITemplate Content { get { return _content; } set { _content = value; } } void Page_Init() { if (_content != null) { Container container = new Container(); _content.InstantiateIn(container); divContent.Controls.Add(container); lblSearchTitle.Text = LblModalSearchText; } } protected void Page_Load(object sender, EventArgs e) { if (hdVisible.Value=="true") { modalSearch.Show(); } } } public class Container : Control, INamingContainer { internal Container() { } }} This control when used on any aspx page will popup the control placed inside the template "divContent" as modalpopup. ________________________________________________________________________ Now I am trying to convert this user control to Custom Control and my code is:-
[ParseChildren(true)] [PersistChildren(true)] public class DNAWebAjaxTool : PlaceHolder { public event EventHandler BtnModalSearchCloseClickEvent; public event EventHandler Click; private ITemplate _content = null; private HtmlInputHidden _hdVisible; private Panel _pnlModalSearchContent; private Panel _pnlModalSearch; private ModalPopupExtender _modalSearch; private Button _btn; private DivContainer divContent = new DivContainer(); private string _viewState; public DNAWebAjaxTool() { } public Panel PnlModalSearchContent { get { if (_pnlModalSearchContent == null) { _pnlModalSearchContent = new Panel(); } return _pnlModalSearchContent; } } public ModalPopupExtender ModalSearch { get { if (_modalSearch == null) { _modalSearch = new ModalPopupExtender(); } return _modalSearch; } } public string ViewState { get { return _viewState; } set { _viewState = value; } } public HtmlInputHidden HdVisible { get { if (_hdVisible == null) { _hdVisible = new HtmlInputHidden(); } return _hdVisible; } } [TemplateInstance(TemplateInstance.Single)] [TemplateContainer(typeof(DivContainer))] [PersistenceMode(PersistenceMode.InnerProperty)] public ITemplate Content { get { return _content; } set { _content = value; } } protected override void OnInit(EventArgs e) { _content.InstantiateIn(divContent); base.Controls.Add(divContent); base.OnInit(e); } protected override void OnLoad(EventArgs e) { if (HdVisible.Value == "true") { ModalSearch.Show(); } base.OnLoad(e); } void _btn_Click(object sender, EventArgs e) { BtnModalSearchCloseClickEvent(sender, e); } public virtual void Hide() { PnlModalSearchContent.Visible = false; ModalSearch.Hide(); ViewState = "false"; } public virtual void Show() { PnlModalSearchContent.Visible = true; ModalSearch.Show(); ViewState = "true"; } protected override void CreateChildControls() { base.CreateChildControls(); } protected override void Render(HtmlTextWriter writer) { if (ViewState == "true") { _modalSearch = new ModalPopupExtender(); _modalSearch.ID = "modalSearch"; _modalSearch.TargetControlID = "btnHiddenSearch"; _modalSearch.PopupControlID = "pnlModalSearch"; _modalSearch.DropShadow = false; _modalSearch.RepositionMode = AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResize; _modalSearch.Drag = false; _modalSearch.BackgroundCssClass = "modalBackground"; _modalSearch.Show(); _btn = new Button(); _btn.ID = "btnHiddenSearch"; _btn.Style.Value = "display: none"; _btn.RenderControl(writer); _pnlModalSearch = new Panel(); _pnlModalSearch.ID = "pnlModalSearch"; _pnlModalSearch.CssClass = "modalPopup"; _pnlModalSearch.RenderControl(writer); PnlModalSearchContent.ID = "pnlModalSearchContent"; PnlModalSearchContent.RenderControl(writer); divContent.RenderControl(writer); _btn = new Button(); _btn.ID = "btnModalSearchClose"; _btn.Text = "Close"; _btn.CausesValidation = false; _btn.Click += new EventHandler(_btn_Click); _btn.RenderControl(writer); } } } public class DivContainer : Control, INamingContainer { internal DivContainer() { } } ________________________________________________________________________________________________ The problem I am facing is that the modalpopup extennder is not coming up as a popup.
In a GridView, I am using ItemTemplate section for multiple editing. I am using ClientValidationFunction property of MaskedEditExtender to run a client side function. Let's call it MyClientFunction . How can I pass an ID of a control found in the gridview row to my MyClientFunction?
I know how to do it via RowDataBound as follows: Is there a way to wire it up in ClientValidationFunction property?
Dim NewDte As TextBox Dim PrvDte As Label NewDte = CType(e.Row.FindControl("EditReadingDate"), TextBox) PrvDte = CType(e.Row.FindControl("lblEditLstRdgDte"), Label) NewDte.Attributes.Add("onkeyup", "javascript:ChkDteMultiple('" & PrvDte.ClientID & "')")
How to read the Textbox which is inside Ajax tab container. This is my design
<ajax:TabContainer ID="TabContainer1" runat="server" > <ajax:TabPanel ID="tbpnl1" runat="server"> <HeaderTemplate> New User </HeaderTemplate> <ContentTemplate>
[Code] ....
Here is my sample script that I need to call onblur event of text box
<script type="text/javascript"> function alert() { var value = document.getElementById("TabContainer1_tbpnl1_txtuser").value; alert(value); } </script>
I have a custom control that is based off the gridview control located at: here The control is basically a gridview that automatically creates a column of checkboxes that can be used to "check" individual rows in the gridview. During the gridview's "CreateColumns" event, the "checkboxcolumn" is created dynamically. The checkboxcolumn also contains another checkbox in the header that is used to "select/deselect all" checkboxes in the column. Since the gridview does not automatically remember the state of the checkboxes in the checkboxcolumn on postback, I added a method to the control called "SaveCheckBoxState" which stores the indexes of the checked rows in Viewstate, and then I modified the "OnRowDataBound" event to check the Viewstate and reset the checkboxes based on the Viewstate.
I then added a call to "SaveCheckBoxState" in the gridview's OnSorting and OnPageIndexChanging events. This works great so long as I'm sorting or changing pages. However, I need it to update the viewstate everytime someone clicks or unclicks one of the checkboxes. At this time, the checkboxes are rendered with an onclick event that calls some javascript to highlight the row, or in the case of the checkbox in the header, to select/deselect all checkboxes. I need to call the "SaveCheckBoxState" method from the javascript used by the customcontrol, or I need to find a way to modify viewstate from javascript and perform the same action as "SaveCheckBoxState".
I've tried adding the "SaveCheckBoxState" to the onclick event declaration in the checkboxes, but when run, it simply tells me that the method is undefined. It doesn't exist in the parent page, and I don't think I should have to make an event for the parent page to pass the click to. It seems to me this should be all self contained within the custom control. Does anyone know how I can acheive this? Here is the code for the gridview OnPreRender event where the onclick event of the checkbox is set:
protected override void OnPreRender(EventArgs e) { // Do as usual base.OnPreRender(e); // Adjust each data row foreach (GridViewRow r in Rows) { // Get the appropriate style object for the row TableItemStyle style = GetRowStyleFromState(r.RowState); // Retrieve the reference to the checkbox CheckBox cb = (CheckBox)r.FindControl(InputCheckBoxField.CheckBoxID); // Build the ID of the checkbox in the header string headerCheckBoxID = String.Format(CheckBoxColumHeaderID, ClientID); // Add script code to enable selection cb.Attributes["onclick"] = String.Format("ApplyStyle(this, '{0}', '{1}', '{2}')", SelectedRowStyle.CssClass, style.CssClass, headerCheckBoxID); // Update the style of the checkbox if checked if (cb.Checked) { r.BackColor = SelectedRowStyle.BackColor; r.ForeColor = SelectedRowStyle.ForeColor; r.Font.Bold = SelectedRowStyle.Font.Bold; } else { r.BackColor = style.BackColor; r.ForeColor = style.ForeColor; r.Font.Bold = style.Font.Bold; } } }
I have a custom control which inherit from the Table class and in the constructor, it takes a an integer as an argument. There is no empty constructor.
Is there a way for the user to set that variable in the properties window after they drag the control onto a form.
I know some .NET controls, you can set the source for the parameter to different things like another control's property, QueryString using just the properties window.
Right now, I have to create the control dynamically. I read the query string and then created the object.
here's a situation and I would appreciate your response.
I have programmatically created the Wizard control:
Page_Load(obj s, evargs e) { Wizard ClaimDetailWizard = new Wizard(); foreach(int item in selectedItems) { //create new step //added custom control to new step //add step to wizard } //added wizard to a placeholder on a page }
Based on List I get from Session i added new steps to my wizard To each step I had added a custom control
Each custom control in tern contains another custom Gridview Control in it.
So here's the problem when the page loads for example for two steps. All is good Wizard does what it's supposed to do.
But when I try to use sorting or paging in that custom Gridview. Somehow it displays the gridview I should see in the next step of the wizard.
Also what I'm noticing through debugging. Is that when I press next in the wizard I go back to the original page where I do all of the code specified above, and it recreates the wizzard. But it goes to the next step. Is this the way wizard supposed to work? Just doesn't seem very efficient.
created a Custom Textbox Control that is intended to be a "masked date" textbox, so that I can handle different ways a user might enter in a date and make it work no matter what.I did this by creating a custom control with 3 separate Textboxes one for month,one for day one for year,then do some handling for different things that could be entered and it would all work.
The problem I am having is,when I add this control to the page,if I do an alert to check the Text value of the custom control it just gives me "[ServerControl1]" even if I enter in a date.
I tried doing an AutoPostback after entering so that it would refesh the Viewstate to have the values of the textboxes but the control doesnt seem to actually postback, even though I have it enabled.accessing the Textbox value after someoen has entered a date?first custom control I have created and have been using google.
I've written a custom date control that inherits the TextBox control, but has it's own three textboxes for capturing month,day, and year separately. I wanted to use the CalendarExtender with it so people could plug in the date that way as well, but I cannot "trigger" the CalendarExtender to show with my custom control.
I have created a user control and am ready to convert it into a custom control. I am trying to follow:
[URL] the steps mentioned in the link.
I am not seeing Build / Publish Web Site option.
I am using VS 2008. I only see Publish User Control but it doesn't give all the settings mentioned below. When I do publish user control, it just copies the ascx file to the desired location. how can I convert the user control to custom control.
I am trying to use a collapsible panel extender within a custom server control. I've used the extender elsewhere with no issues but when I try to add the control to my panels collection of controls in my custom control, my page crashes. Take it out and no error. I'm adding other controls to the panel...literals, labels, etc. This, however is the only ajax control I am using. Is there something I need to do as far as registering the extender with the script manager (on the master page)?
I have a modalpopupextender inside a custom user control and when the user clicks on a imagebutton in the custom user control, this modalpopup has to be displayed to the user for inputs. The problem that I am facing is that nothhing is getting displyed even after clicking the image button.
i am using master pages and this custom user control is being added dynamically to one of the child pages. I have added the scriptmanager as a part of the child page rather than as a part of the user control because there are multiple custom user controls present in this page.
Lemme go to the code:
This is the snippet present in the custom user control:
I am trying to set the width property of a custom control validator but it is not happening at all. The width of the validator control popup is constantly 100% width (the width="200px" below has NO effect at all)
I am interested in learning how to develop a custom asp.net ajax gridview, and I have obtained some books on the subject, but would still like a quick answer for a question: When developing a custom ajax server control, can I somehow use jquery for the client-side part of the control? Are there any collisions with ASP.NET AJAX framework and are there special requirements (e.g. only available for .NET 4.0 etc.)?I would also appreciate any suggestions on resources from which I can learn more about developing a custom asp.net ajax server control from scratch.
I created an Extender which has a custom property that drills down a list XML elements from an xml file, where users can select xml elements during design-time. This works perfectly fine. However, my code only has a hardcoded xml filename (source of the xml elements list) and I need to change this by maxing the xml file user-specified.
What I did is that I created another control (panel) which has a custom property that when clicked (through the ellipsis), it will allow a developer to select the xml file which is supposed to be the source xml file that the Extenders shall use. The filedialog from custom panel's property works perfectly fine.
However, my problem now is that when I drag-drop my Extender, I cannot find a way to get the property value of the custom Panel Control which contains the xml filename. I tried creating a static variable which I thought the custom controls can share but VS2010 is breaking.