Web Forms :: FindControl("id"); Does Not Work - Finding Another Alternative?
Jan 4, 2011
I have a problem with selecting a control from codebehind.
This is my scenario:
1. i get a string from a webservice (session): string boxstring = "<input type="text" id="MainContent_TextBoxStopRoadName01" name="ctl00$MainContent$TextBoxStopRoadName01">";
2. i insert this string to a <div id="boxcontainer"> from codebehind like this:
boxcontainer.InnerHtml=boxstring;
3. Page loads
4. User types text in the box, and clicks a button to submit it
5. How do i find this textfield from codebehind from its id? I would like to get the field as an TextBox control, but the text value is the most important.
I´ve tried several things, like Findcontrol("id") and Findcontrol("id").Findcontrol("id") and so on. But it doesent work.
Another thing does work though, if instead of a string I create the textfield as an TextBox control, and then insert it: BoxContainer.Controls.Add(TextBox); - then it works! But it is not a possible solution in my situation. I only have the textbox (among many other elements) in a string.
I stumbled into a problem which is that FindControl will only return a control in the ListView after the listview has been databound. Here is the code which is not working, and I'm getting the "Object reference not set to an instance of an object error" when I try to add the attribute to the control:
I have a usercontrol include file that has a panel on which I have programatically added checkboxes that equate to the results of a selection via a sql select stmt.
I am now trying to find the results of the checkboxes (ie checked/unchecked) using findcontrol as per
[Code]....
the commented out code is a different attempt
Is this the correct method(s) or should I do something different
Now this code does run through all the images, but i need to alter the querystring and make it change to match the ID of the photo displayed. I tried adding QueryStringField="String" but this was hopeless.
I have a querystring like so:-
Quote:
[URL]
When i click on next image i need it to change to something like:-
Quote:
[URL]
See the PhotoID has changed. But it currently does not do this. When i arrive on the page the PhotoID stays the same. I have been trying for a while and im starting to give up!
I am developing a new project to list files and directories under an specified location on disk. I use normal methods like Directory.GetFiles() to achieve this task but the amount of files is getting very big (> 300000) and the site is becoming terrible slow.
I worked with Index server with previous versions of Asp.Net but I was wondering if there is a new way for my website running Asp.Net 4.0.
Also I heard something about Index Server is obsolete to achive file listings and search. Is there any new alternative?
Quick question: Is there a "per-user" data storage object (similar to Session) that I can store data in the global scope (similar to HttpRuntime.Cache)? Almost as if Session and HttpRuntime.Cache had a baby.
Full Background: I have a ASP.NET website that was originally written for a single thread. Now I changed it so that certain actions will spawn a background thread and the browser polls a service to get status updates.
The problem I am having with this is that certain pieces of data are stored into the HttpContext.Session[] object (membership authentication token, for example). These pieces of data need to be unique to each user and accessible to the background thread. Session is not available to the background thread.
I am aware of HttpRuntime.Cache but that would require micromanagement to segment out the users and to expire it at the same time the session is expired. Session, on the other hand, automatically expires this things at the right times that I want it too and is already used by things like the SqlMembershipProvider.
My question is, is there something that behaves similar to the Session but exists in the global scope?
I am working on a Report Module for a DNN website and have found that the reports do not show in the reportviewer control if there is no ScriptManager control on the module. I am not sure where but somewhere I read it was needed. THe problem is when it is on the module so the reportviewer works correctly I am getting some errors with my other controls( mainly drop downs I want to use for selecting the reports) I am not getting an error just the DDL is not showing up on the page when scriptmanager is included but it does show up when its not included of course then the reportviewer shows no report.
Was RouteValueDictionary intended for use with htmlAttributes? Is there an alternative? The only 'feature' RouteValueDictionary looks like its got is it has a constructor which accepts an object.
I create a menu control in a user contol, named as RightUserrControl.ascx.
and i kept this RightUserrControl.ascx in nearly in 200 pages.
every thing is working fine , but when ever i am going to any page the page loading is very slow, nearly each page is taking 1 minute to load.
set caching for the user control, if this is the case , do i need to declare output cache in all 200 pages or is there any alternative way to resolve this issue.
Consider the following code, adding 2 textboxes with the same ID (oops):
protected void Page_Load(object sender, EventArgs e) { string TextBoxName = "TextBox1"; Panel p = new Panel(); TextBox t = new TextBox(); t.ID = TextBoxName; p.Controls.Add(t); if (p.FindControl(TextBoxName) == null) // <-------******* { TextBox t2 = new TextBox(); t2.ID = TextBoxName; p.Controls.Add(t2); } Page.Form.Controls.Add(p); }
The code is designed to stop adding the same ID twice. However, the Panel.FindControl() method is not finding a control that was added in the previous line of code.
Am I using this in the wrong way?
I mean - sure - I could manually iterate through the controls in the next level, like:
string TextBoxName = "TextBox1"; Panel p = new Panel(); TextBox t = new TextBox(); t.ID = TextBoxName; p.Controls.Add(t); TextBox t2 = new TextBox(); t2.ID = TextBoxName; bool duplicateFound = false; foreach( Control c in p.Controls ) { if(c.ID == TextBoxName) { duplicateFound = true; break; } } if( duplicateFound ) { t2.ID = TextBoxName + "__0"; p.Controls.Add(t2); }
But I don't understand why this isn't working, whereas Placeholder controls and UserControls work fine.
The reason I am using Panels is for CSS styling. body > div > input - but still - it isn't working.
i have a masterpage and other pages. i want to use findcontrol method to find a textbox (not on the master page) to check whether it is empty or not.
my code is as folows; Dim myContentPlaceHolder As ContentPlaceHolder = CType(Master.FindControl("MainContent"), ContentPlaceHolder) Dim UpdatePanel1 As UpdatePanel = CType(myContentPlaceHolder.FindControl("UP1"), UpdatePanel)
As a workaround for the fact that asp:Checkboxes don't have values, I am attempting to dynamically create the ID's of checkboxes in a DataList so that it inserts the primary keys into the control ID. This is surprisingly difficult.
I have placed a PlaceHolder in my DataList ItemTemplate, then in the ItemCreated I create the checkboxes using string.Format("Checkbox{0}", DataBinder(e.Item.DataItem, "ID")). The problem is that this only works in a non-postback condition, as on postback the DataItem is null. And of course ItemDataBound isn't called on PostBack so that won't work either.
I can't seem to find a good way to handle this short of if (IsPostback) dataList.Bind(), which i don't think is a good way to do it.
I have a gridview with several ItemTemplates. The first contains a checkbox the rest contain textboxes. I then added dynamically some bound controls like this:
BoundField bdfPrivName = new BoundField(); clsUtilities.SetBoundFieldCenter(ref bdfPrivName, "PrivName", "Priv Name"); BoundField bdfDescription = new BoundField(); clsUtilities.SetBoundFieldLeft(ref bdfDescription, "PrivDesc", "Description"); BoundField bdfLive = new BoundField(); clsUtilities.SetBoundFieldCenter(ref bdfLive, "Live","Active?"); grdExisting.Columns.Add(bdfPrivName); grdExisting.Columns.Add(bdfDescription); grdExisting.Columns.Add(bdfLive);
I then use FindControl to locate the checkbox and textboxes and perform my logic based the result foreach (GridViewRow gvr in grdMissing.Rows) { mckbAny = (CheckBox)gvr.FindControl("ckbAdd"); mtxtApplyDate = (TextBox)gvr.FindControl("txtAddApplyDate"); mtxtDateToAdd = (TextBox)gvr.FindControl("txtAddDateToAdd"); mtxtDateToRemove = (TextBox)gvr.FindControl("txtAddDateToRemove"); etc.
This all worked fine. I then got a request to put the bound fields as the second, third and fourth columns, after the check box and before the textboxes. I found that this was easy to do by changing the Add's to Inserts as follows: grdExisting.Columns.Insert(1, bdfPrivName); grdExisting.Columns.Insert(2, bdfDescription); grdExisting.Columns.Insert(3, bdfLive); It looked fine of the page, but the FindControls, all of them fail to work.
In my Application I am using one Modal popup extender. I have one Grid View with Item Template containing Link button. I want to set Target Control Id of Popup extender to link Button of the Item Template. As it is inside the Item Template I can not access it directly in the page.
So Is there any alternative to achieve the same functionality.
I have a problem to write a string to a LinkButton that is located inside a GridView1. Now the hiarchy of controls is like this to understand how to Find this control:
TabContainer0 TabPanel5 TabContainer1 TabPanel7 Panel8 GridView1 LinkButton1 So LinkButton1 that we want to write a string to is located in a GridView1 which is located in Panel8 which is located in TabPanel7 that is located in TabContainer1 that is located in TapPanel5 that is located in TabContainer0.
So below is my code but no string is written to that linkButton, so I wonder if I miss something basic out here?
If I have a reference in my project to System.Data.Linq in an MVC application compiled against 3.5 I can use Linq to SQL generated entity objects in my views and access the foreign key entity sets. If I try and do the same thing in 4.0 I get the error messageCompiler Error Message: CS0012: The type 'System.Data.Linq.EntitySet`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
I'm asking these questions for a client of mine...
Can you use asp.net and a ms sql db with GoDaddy?
Do they make it hard to leave them?
10 years ago I took over admin control of my own website that I have with networksolutions. When I change from one isp to another I simply make my own changes to the url with networksolutions and direct it at any old server I want.