Web Forms :: Dynamically Loading User Controls In Tabs In Page?
Apr 17, 2010
I am using ASP.Net 2.0 with Ajax.
I am working on a pretty heavy page in an application and the scenario is:
There is a Tab control in the page, having four tabs. These tabs individually consist of different user controls and other asp controls. Most of these usercontrols in turn consist of other user controls. Every user control contains huge javaScript functions which validate them, populate controls and call web services.
What I am trying to achieve is to load only the Tab and its user controls on the page load and when the user clicks on a specific tab, load its contents (User controls) dynamically. Once that is done, I am setting the tab's postback to false to prevent loading it again once loaded.
I tried to achieve this by making the user controls in the other tabs - visible="false" in the markup and loading them from server side on some specific event. But that causes the javaScript functions in those user controls to give errors ('Object expected') when I go to that tab.
If I set the user controls in the other tabs to visible true, then no matter what; the page life cycle goes to each registered control and loads every subsequent control in that web user control which makes the main page slow (on loading and every postback).
The position of the Tab and the inner user controls is fixed. Although I am taking care that no data is populated unnecessarily on the page and user controls on hidden tabs, I dont want the tabs to get loaded altogether unless requested. If I load them on runtime, their corresponding javaScripts start giving errors.. note that I am not generating the controls on runtime, they exist in the page design. I just dont want to load them dynamically
The web page I am trying to (slowly) build should allow users to add whichever user controls they want on their page, and order them whichever way they like. This is saved in a database.
So each user could have a different number of controls on the page.
This is the design code, at the minute the user controls are fixed and are not loaded dynamically. They user controls are stored in 'blocks' which look like widgets on the page and can be dragged about to different columns. For each user the layout is stored in the DB i.e. which blocks are in column 1 and which blocks in column 2 etc.
How could I change this so that it can create a 'block' div for each user control returned from the database and put the user control in that block and in the right column?
I am trying to create my own website management framework similar to DNN/SiteFinity (only a mucho cut down version).
One of the big (but common) features is to be able to dynamically add user controls to provide additional functionality.
I would prefer to use a pre-compiled .NET "Web Application" over a dynamically compiled "Website".
What are the implications of using LoadControl method to dynamically add a user control for a pre-compiled web applications with specific regard to:
Session (preume I am using the stateserver)What happens to all the other users - will they be logged out? Application pool recycling due to changes to some compilation??
I am not sure I have ever dynamically added a user control to a pre-compiled web applications as I have mainly been using "Websites" so I am making a large presumption that it will work because if the website is pre-compiled, does this mean the dynamically added user control will be dynamically compiled as required even though the site is pre-compiled?
EDIT
I also forgot to mention that the user controls will be outside of the application directory and so won't be published during web deploy - they will be uploaded via another website.
First, I would like to apologize, the search on the site wasn't working, so I don't know if I'm missing an existing post or not.
I have a web page that uses a master page file. I am using a third party control from Component One(TabStrip), the tabs are rendered as links on the final page. When a tab(link) is clicked, I need to load the appropriate web user control associated with that tab. Each web user control has its own post backs and methods. I know that I can load the controls on the "SelectionChanged" event of the TabStrip control, but then any postback created by the web user control that is loaded causes the page to refresh and the control was never loaded in viewstate. So, I tried to put my procedure of loading the web user control into the page_init method. This would work, if I could read which link was clicked on from within the page_init method. I tried using a javascript function to run "onclick" of the tabs and within it setting the value of a hidden control. I have verified that the javascript works and that the hidden control's value is getting set correctly. When I get into the page_init method, the value of the hidden control is not readable.
I'm tying to understand the page lifecycle to the fullest, but I don't see what I'm missing here. I know that I need to load the web user controls in the page_init method in order to persist the page as a whole, but how can I get which tab(link) was clicked to know which control should be loaded?
Situation: I have a drop down list which I need to pass on to a webservice on button click. I am using Sys.Net.WebServiceProxy.Invoke to make webservice call.
Everything is happening inside a usercontrol which loads on runtime using dynamicpopulate extender.
I get following error:
Sys.InvalidOperationException: Cannot serialize object with cyclic reference within child properties.
Situation: Usercontrol also has a listview which is bound to dataset. However on calling listview.DataBind() in side the webservice method.
I get following error:
The ListView control 'ProductsListView' does not have a naming container. Ensure that the control is added to the page before calling DataBind.
There is no problem when call to service method is parameter less and listitem is not bound.
I have an .aspx page with multiple .ascx (User Controls on it). One of the User controls is very slow in loading (calls a very slow webservice for the data.). Now, my question is how to render all the controls on the page (so the User can view those) and have a rotating icon for this control (slow one) (till it loads). I know, I need to bring AJAX into picture, but any clarification on that would help as I will be new to AJAX programming.
I have been adding different JQuery Carousels to AJAX Tabbed Panels - the first one displayed on the page always works. But any other tabs dont work when I select the tab. I have about a dozen different carousels.
Can anyone recommend one that works in AJAX Tabs or how I can go about rectifying this?
Scenario: Loading partial views into jquery tabs(Ajax Mode) using MVC3 &Razor . Works fine in FF but not in IE8 or IE7. I can trace the ajax request & responses in firebug fine and see partial views returned from the server (containing JqGrid Html Helper methods).This loads up fine within the tab conatiners in firefox.But in IE nothing happens and i cant see any ajax requests getting fired from changing tabs when i use Fiddler.Ive tried playing around with the ajaxOptions when i initialize jq Tabs to no avail.
Ive had this problem on MVC2 and i resorted to laying the tabs contents out statically ,which i dont want this time, as i need lazy loading. Below is a full page source dump from IE8, renedered using the razor view engine. (Links to all Csss and JS libs)
<script type="text/javascript"> $(document).ready(function () { $("#tabs").tabs(); }); </script> </head> <body> <h2>Index</h2> <div id="tabs"> <ul> <li><a href="/"><span>Home</span></a> </li> <li><a href="/ServicesMonitored/GetServicesMonitoredTab"><span>Monitored Services</span></a> </li> <li><a href="/ServicesMonitored/GetServicesFullTab"><span>Full Services</span></a></li> </ul> </div> </body> </html> From Controller: public class ServicesMonitoredController : Controller { IServicesMonitoredRepository<ServiceHeaderInfo,InfoDataItem> Services; public ServicesMonitoredController() { Services = new ServicesMonitoredRepository(); } public ActionResult GetServicesMonitoredTab() { return PartialView("ServicesMonitoredTab"); } public ActionResult GetServicesFullTab() { return PartialView("ServicesFullTab"); } #region Return Services [HttpPost] public JsonResult ReturnServices(string sidx, string sord, int page, int rows) { }
At present I am using ajax:TabContainer for the tabs. As you know that does not do Lazy loading. Can sonone give me links to or some code examples to do Tabs with Lazy loading. I know that the Jquery tabs do lazy loading but there are no complete examples on the web which tells you on how to do lazy loading with JQuery tabs.
Load data while Scrolling Page down with jQuery AJAX and ASP.Net.
I want to implement same thing but want to get data base on User input and implement the same. How to write Store Procedure where i can use where clause.
I'm developing an ASP.NET application with C# and Ajax.I have a page that holds user controls loaded dynamically. I need to pass some data (integer values and some strings) to the user control that has been loaded dynamically.Now I use Session to pass these values, but I think I can use another way; something like VIEWSTATE or hidden input.What do you recommend me?The fact that I load the controls dynamically is important because controls are loaded on every postback, and I can't store any value on controls.
i have a page it contains a User Control. in it we have a Button "View Tree" it will open a pop up window (contins a tree view).when we select any node in the tree the Corresponding item will be Loaded in the User Control and Close the Popup.i want to achive this With out re loading the total page. i am using VS 2008.
I can't figure out how to get the legend to populate all the "strReason" and get the correct percents to show for each column. This is where I'm at right now.
I know there are a number of ways to show the user that a page is loading with a visual image.What is the slickest and most effective way of doing that. I would like to use Javascript if possible.Presently I can turn on an image calling a function form pageLoad() method of Javascript, but I can't figure out a way to turn it off. Couldn't get pageUnload() to be called.
I know this has been asked before, but I feel like I'm losing my way trying to follow the other examples out there. Does anyone see a straightforward solution to my particular problem?
Goal:
Two column Master Page
Left column contains a list of [stuff] (I'm trying a Repeater with LinkButtons)
Right column contains a TabContainer which will add dynamically created tabs when buttons on the left are clicked.
I had initially been creating tabs in the LB's OnCommand event, but of course this means that any tab generated by one click is lost if the user clicks another LinkButton.
So I moved the code to create a new tab to the OnInit section of the page and attempted to loop through the RepeaterItems comparing the UniqueId of each LinkButton until I found the one that was clicked using Request.Form["__EVENTTARGET"].
When I tried to loop through the RepeaterItems, however, the count was always 0, and the Repeater would not populate.
So now I am rebinding the Repeater in the Init section on every post-back - this allows me to find the LinkButton that was clicked. I then add the new Tab based on the LB that was clicked like this:
[Code]....
This properly adds new Tabs to the TabContainer using this code:
[Code]....
but I still have the issue where I can only ever have one dynamically created tab in the TabContainer at a time. All of the code above is being executed in OnInit, which I thought would save the tabs during post-backs, but instead this is behaving as tho I was adding the tabs in the OnCommand event of the Link Button...
I'm trying to create new tabs within page. When I click a link in my navmenu, it should open the Redirected page in a new tab within the page as new tab (not the browser tab). It is something like the visual studio, where we get the page opened inside a new tab when you click an item in the Solution explorer. Would any body let me know how to implement this functionality. (generate tab with close functinality). I m not talking about TabStrip.
I am working on a page where user controls are dynamically added to the page and refreshed with a timer in an updatepanel.
Since I already coded dynamic user control loading into the page, I would also like to implement *some* form of dynamic layout method for those controls. I was thinking coordinate values.
I have used Top and Left properties on panels before to achieve this functionality in my windows forms applications but since this is a web application things are different.
I realize I can do the whole "absolute positioning layout model" override in Visual Studio but as far as I know this only benefits me at design time. Is there a way to programatically trigger that behavior?
I looked at the silverlight Canvas and how you can pass offset values in with your controls. Something like that would be great, but this isn't Silverlight, lol. I also considered a web method to return globs of html tags to fill the area between these controls.
This is a page that would be reused over and over from client to client so this is why I would like to get this dynamic layout working. It would save me much effort later on.
On a dashboard page I'm loading several controls dynamically; the controls always need to be loaded so there is no if (!Page.IsPostBack) code. The problem though is in that in the code-behind, we are using Request.Form.GetValues and a particular dropdown field's value is always null (presumably because the controls are being cleared and reloaded on a postback) and this is triggering an error later on in the page that expectes a value from this dropdown. I have to use Request.Form.GetValues because the page enables dynamically adding rows (each row containing 5+ HTML inputs) via Javascript.
If I check for postback, then the button event of the control does not fire at all but instead the dashboard page is reloaded, and no controls are loaded at all (i.e. the page is blank).
How do I get around this issue? I need to dynamically load the controls at all times, but I also need to retrieve the values via Request.Form.GetValues.
(Server-side, in ibtnGetQuote_Click - this is actually a loop since user can append multiple rows; "i" is appended to the word "Class" to find the exact row)
IList<string> classes = this.GetFormValues("Class1"); // This will return null all the time... private IList<string> GetFormValues(string clientID) { String[] values; values = Request.Form.GetValues(clientID); if (values == null) { Control ctl = FindControl(clientID); // uses built-in FindControl method values = Request.Form.GetValues(ctl.ClientID);......
The original code was hardcoding the "ctl00$xx$xx" stuff, but the control may or may not be loaded so we cannot guarantee the name the control will get. In fact, I'm not even sure if this will work for all scenarios since only the FIRST control is a server control, the rest are just standard HTML controls so wouldn't have a "ClientID".
I have 3 user controls that I have to load at the same time. They each contain a gridview that pulls data from the database. They are doing a "delay" load of the data so there is a progress bar template that shows that the data is loading however the first gridview fires and loads, then the second, then the third and I need them to all fire at the same time.
I am loading a series of controls in the Page_Load event. However, I have to recreate those controls each page load, which means storing their data elsewhere. This is cumbersome.
protected void Page_Load(object sender, EventArgs e) { MyControl control = (MyControl)LoadControl(...); control.Initialize(GlobalClass.controlData); //^gives the control the data it had previously. //Or use ViewState["controlData"] if serializable. Controls.Add(control); }
I feel like I should be using if (!IsPostBack) {}, but I don't know how, or why. In contrast, if I place the controls into the markup, then the controls seem to stay persistent. For example, a button in mark-up will remember any changes to its Text property (I think?).
How do I maintain some sort of persistence with dynamically added controls, like controls added via mark-up? This would save me much work and frustration.
(I've coded for a small eternity, but the more I do ASP.NET, the more confused I become. Which is exactly the opposite of what how I understood learning to work :-P.)
I have a scenario that I cannot fit my small brain around at the moment. I have a database driven site that also has a variable amount of user controls that go on to some pages. Some pages do not have user controls associated with them).
So I'm returning the page's body text from the data base like this:
The quick brown fox %ucUserControl1.ascx% jumps over %ucUserControl2.ascx% the fence.
I'm using a text editor for the backend that I'd like to be able to specify a user control in text format (by wrapping it in some sort of tag-- % was used for my above example, but anything will work).