Paul, I just tried doing that, and unfortunately that doesn't solve the problem; I get the exact same exception with the same error message.
In my code, added the following line after the LoadControl(...) re.ID = rid.ToString(); // the response ID is a unique value The first time the page loads, it works fine (with the trace on), but hitting reload causes the exception. Here's the stack trace: [HttpException (0x80004005): Multiple controls with the same ID '_ctl1' were found. Trace requires that controls have unique IDs.] System.Web.TraceContext.AddNewControl(String id, String parentId, String type, Int32 viewStateSize) +312 System.Web.UI.Control.BuildProfileTree(String parentId, Boolean calcViewState) +198 System.Web.UI.Control.BuildProfileTree(String parentId, Boolean calcViewState) +260 System.Web.UI.Control.BuildProfileTree(String parentId, Boolean calcViewState) +260 System.Web.UI.Control.BuildProfileTree(String parentId, Boolean calcViewState) +260 System.Web.UI.Page.ProcessRequestMain() +1624 It get's a unique id, somehow, either by asp generating it or by me assinging it one. It's when it comes out of the cache that the problem occurs.... --Oren > -----Original Message----- > From: Moderated discussion of advanced .NET topics. [mailto:ADVANCED- > [EMAIL PROTECTED]] On Behalf Of Paul Stevens > Sent: Thursday, November 14, 2002 8:51 AM > To: [EMAIL PROTECTED] > Subject: Re: Exception when using Trace with cached cont rols > > The Solution is pretty simple really each one of the controls you are > creating dynamically has the have an id irrespective if you assign one or > not without delving too deep into the inner workings of asp.NET, lets just > say that if you don't assign a value to the ID property of the control > aspnet will, the names are all in the format _ctl1,_ctl2 etc... Whether it > is expected behavior or some bug in .Net I'm not sure but from time to > time > multiple controls on a page will end up with the same ID (Check the Page > Source of your page and you will see this) this is especially problematic > when you add event handlers to your controls. So basically I just used a > long winded way of saying assign a unique value to each of the controls > you > are adding to the page. > > Ie. > > myC.ID = "SomeUniqueValue"; > > > -----Original Message----- > From: Oren Novotny [mailto:osn@;PO.CWRU.EDU] > Sent: 14 November 2002 02:57 PM > To: [EMAIL PROTECTED] > Subject: Re: [ADVANCED-DOTNET] Exception when using Trace with cached > controls > > Anyone manage to come up with any solutions or alternate ideas to my > problem, or have I managed to stump the great minds on this list ;) > > I've already tried looking elsewhere, on Google, MSDN, and the ng's, to > no avail; this list was my last defense... Is there really no way to > get tracing working with what I'm trying to do? > > Thanks, > > --Oren > > > > -----Original Message----- > > From: Moderated discussion of advanced .NET topics. [mailto:ADVANCED- > > [EMAIL PROTECTED]] On Behalf Of Oren Novotny > > Sent: Monday, November 11, 2002 7:53 AM > > To: [EMAIL PROTECTED] > > Subject: Exception when using Trace with cached controls > > > > I posted this on Thursday today in the -Web list, but so far there's > > been no response and I suspect it's too arcane for that list anyway. > > > > I'm getting an exception if I enable output tracing in my app. The > > exception is: > > > > System.Web.HttpException: Multiple controls with the same ID '_ctl1' > > were found. Trace requires that controls have unique IDs. > > > > Here is my scenario: I have a page that contains a bunch of controls > of > > the same type, just with different parameters. Each time the control > is > > loaded, it sets itself up with data from the DB. What I'm trying to > do > > is to cache the control so that it doesn't go to the DB every time. > The > > control has to display tree of items in it, requiring a recursive DB > > call. I'd like to avoid repopulating often. > > > > I have PlaceHolder p and a bunch of MyControl's that get added to > > p.Controls > > > > Here's what I'm doing (pls ignore capitalization, since Word is > > auto-formatting): > > > > In Page_Load(): > > > > If(Cache["key"] == null) > > { > > RefreshCache() > > } > > else > > { > > MyControl[] myControls = (MyControl[])Cache["key"]; > > > > Foreach(MyControl con in myControls) > > { > > p.Controls.Add(con); > > } > > } > > > > In RefreshCache(): > > { > > ...get data > > Foreach(Data d in Datas) > > { > > MyControl myC = (MyControl)LoadControl("~/MyControl.ascx"); > > > > // Set a property-- setting this property will trigger > > // it to fill the rest of it's data from the DB > > myC.PropertyId = d.PropID; > > > > // Add it to the placeholder > > p.Controls.Add(myC); > > } > > > > // store it in the cache > > MyControl[] myControls = new MyControl[p.Controls.Count]; > > //Copy the controls to the array > > p.Controls.CopyTo(myControls, 0); > > > > Cache.Insert("key", myControls, null, DateTime.Now.AddMinutes(5), > > TimeSpan.Zero); > > } > > > > I also have a public static method to invalidate the cache when > > necessary (if changes are made that would affect the data in the > > control). > > > > I can't use OutPutCache, since the control has to deal with some > > PostBacks, and you can't do that with an OutPutCache. Also, I want to > > be able to programmatically invalidate it, which you also cannot do > with > > OutPutCache. > > > > Now, as is, everything does work. Data is cached after the first > load, > > and upon a page refresh, the controls are taken from the cache. If I > > then invalidate the cache, it reloads the data. So far, so good. > > > > But--if I enable page tracing, I get the exception that I mentioned > > earlier. I want to be able to use the tracing, since it provides > useful > > info, but I also want to cache these controls. > > > > Any thoughts? > > > > --Oren > > > > You can read messages from the Advanced DOTNET archive, unsubscribe > from > > Advanced DOTNET, or > > subscribe to other DevelopMentor lists at http://discuss.develop.com. > > You can read messages from the Advanced DOTNET archive, unsubscribe from > Advanced DOTNET, or > subscribe to other DevelopMentor lists at http://discuss.develop.com. > > You can read messages from the Advanced DOTNET archive, unsubscribe from > Advanced DOTNET, or > subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.
