How To Create A Submitable Form That Contains Dynamically Added And Removed Controls
May 20, 2010
I am trying to create a form that is made up of controls with values that represent an entity with multiple child entities.
The form will represent a product with multiple properties where the user will then be able to create options with multiple properties which in turn be able to create multiple option-items with multiple properties.
My question is what is the best approach? Can i use ajax to avoid postbacks and having to rewrite the controls to the page? If i dynamically add the controls in the form of table rows or grid rows will the data/control values be available in the code-behind when i submit?
This is an age old question.. the last time i had to do this was .Net 2.0, pre-ajax (for me) and i was forced to recreate all the controls on each post back.
So basically when i open the page i get the error above.
I've removed-added the toolkit toolbox.The error occurs p.e. in MaskedEditvalidator when i remove the mask from
MaskedEditExtender.Ok i know that it probably needs a mask and it crashes but what the hell is the
C:UsersswaltherProjectsAspNetAjaxReleases30930AjaxControlToolkitSourceAjaxControlToolkitMaskedEditMaskedEditCommon.cs ?? I don't even use c: for any project.Who is swalther?WTH?
And is there a MaskedEditCommon.cs in the toolkit?I did not find any MaskedEditCommon.cs in whatever, version library or whatever i downloaded.
Error:[ArgumentOutOfRangeException: StartIndex cannot be less than zero. Parameter name: startIndex] System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +7490863 System.String.Substring(Int32 startIndex, Int32 length)
I created a templatefield programmatically and it works fine but whenever I clicked the button inside the gridview and do the postback my templatefield are gone.
I am creating a survey page that has a list of questions and answers that can be radiobuttonlists, checkboxlists or textboxes. These controls are added dynamically to a Repeater in its ItemDataBound event using Controls.Add.
I've managed to render the page ok but when I submit the form and iterate over the controls in the repeater to get the selectedvalues of the radiobuttons and textbox values, FindControl returns null. What do I need to do to get get the selected values? I've tried iterating over the RepeaterItems but that returned null too. I've tried different types of FindControl but it never resolves the control types.
It works if I add a declarative DataBinder in the Repeater like this
However, I want want to dynamically add the controls but in doing this i cant get the selectedvalues when submitting. This is tha main structure of my code...
New to .net and revamping a project from classic. In short, I am trying to create all the form fields in the view based on the database and want to figure out the best practice for .net. I've tried a few things but none seem very clean.
So basically select all the fields and data from the database and loop through each record creating the field type(text, drop down ect)/name/onchange event ect along with creating the basic layout, like putting in a column or group a set related fields.
I see how it can be done in the view itself, but there is a bunch of logic required that would be better suited for a function or class more than a bunch of if then elses in the view itself.
Just for context, it's for a real estate investment management project. So there are over 1000 fields that represent information on a house. What the end user see's is based on their choices and their security. Also, all the fields save with the onchange event which is tied to the name of the field. So everything is dynamic.
I have to dynamically create controls and add them to a table. In a button click I need to find the value entered for that control. The control ids are also dynamic. Below is the code I tried.
[code]....
the problem is that i m getting the rowcount=0 of the table tblUdf inside which i added the table rows and controls inside the table cells.
how to get the control values of the dynamically added controls.
I am just trying to add some dynamic controls to the SimpleQueryControl (which of course is a kind of Web Control and inherits all the methods accordingly). I dont know how to get the values of Child controls which I have added dynamically.
The controls show up fine on the page, but they don't show up when I view source, nor can I access them from the code behind.If I add the controls in the on_init method, they work. But I have some business rules driving changes to the list of controls itself that require I fire the add method elsewhere. Has anyone seen this before? I'm away from work so I can't copy the exact code.
I have two terrible ideas for how to get it working. One involves some jQuery and a set of hidden controls holding a big array of integers; the other is run the method on_init AND on my other events so the controls at least show up. Both smell like ugly hacks.
I am having trouble getting the input values of dynamically created controls in a ListView.
Here is my ListView:
[code]....
The textbox is found, but there is no value. It's like I just wrote over the textboxes with new ones in the previous block. If I remove the previous block of code no textboxes are ever found.
I am trying to create a RadioButtonListWithOther class that extends the RadoButtonList but I can't get the "Other" textbox to render on the page. When I step through while debugging I can see the control in the parent control's Controls collectio but it still doesn't render.
public class RadioButtonListWithOther : RadioButtonList { private TextBox _otherReason; public RadioButtonListWithOther() { _otherReason = new TextBox(); _otherReason.TextMode = TextBoxMode.MultiLine; _otherReason.Rows = 6; _otherReason.Width = Unit.Pixel(300); _otherReason.Visible = true; } protected override void CreateChildControls() { this.Controls.Add(_otherReason); this.EnsureChildControls(); base.CreateChildControls(); } protected override void OnSelectedIndexChanged(EventArgs e) { _otherReason.Enabled = false; if (OtherSelected()) { _otherReason.Enabled = true; } base.OnSelectedIndexChanged(e); } public override string Text { get { if (OtherSelected()) { return _otherReason.Text; } return base.Text; } set { base.Text = value; } } public override bool Visible { get { return base.Visible; } set { //Push visibility changes down to the children controls foreach (Control control in this.Controls) { control.Visible = value; } base.Visible = value; } } private bool OtherSelected() { if (this.SelectedItem.Text == "Other") { return true; } return false; } }
Here is my code to add an instance of this control to the WebForm:
I put this in the aspx.cs of the form I am doing, but, since I haven't found a way to call variables from the ASP, I recreated them, still, even if I did get those, this problem would still exist:
App is imported in the parent web.config file, Tom and App have classes with the same names.To avoid errors resulting from ambiguous class names I removed the App namespace from the sub-directory where the Tom namespace is used.
However the namespace App is still imported on content pages that have a master page outside the Tom directory. This causes the aforementioned errors.Here is my dir structure
-Root Directory --Default.master --web.config (App is added in web.config) --Tom Sub-diretory ---web.config (App is removed in web.config) ---Content page that uses Default.master (Here is the problem) ---Page without master (Works OK)
Ihave the following code and would like to be able to control the layout of the textboxes and labels so they arent just in a long column. Right now everything works and controls are added, but they are added in 1 column which if you chose 32 from the dropdown the page becomes very long.. so would like to maybe wrap them across 3 columns so that each has at least 10 per column.
I have a user control, which is added dynamically, but I have noticed that when it is on the page and viewing the source that none of the controls within have been given unique ids. How do I give my user control and the controls within unique ids in order that I can use them in my events?
I'm building an ASP.NET UserControl where users of the website can upload several pictures at once. I'm doing it the old fashioned way by letting the user enter the amount of FileUpload controls wanted and then add them dynamically from C# to a asp:Panel control.
While this works, the values/files from the FileUpload isn't stored for when the user clicks the "Save" button. How exactly do I go about this problem?
My code for specifying the amount of FileUpload controls wanted:
I'm adding a serires of asp:literal and asp:textbox controls to a panel in code as below (the eventual aim being to add only some of the controls depending on the user):
[code]....
How can I control how the panel is rendered, preferably without having to create a custom control?
I'm writing a formbuilder for our CMS which dynamically loads bespoke controls into panels within a repeater.
The bespoke controls all inherit from, lets say 5arx.FormBuilder.FormControl, a base class which defines abstract methods for initialising, validating, repopulating, gathering submitted data from them. Controls range from simple text fields to complex, composite client-side controls.
It all works very well, but I've noticed something I feel is anomalous. During the course of writing code to retrieve form controls. gather their data and persist it to my database I noticed that their type reverts to the way objects get typed if you write your code in the (v. irritating) VS 'website project' mode.
So, for example a control that is defined as living in a namespace and being of type
Getting the BaseType property will correctly retrieve the underlying class, but it is perplexing to me why this should be happening. Particularly as I spent much of the summer refactoring our app from its original form as VS Website project (complete with shared code in the App_Code folder and other nastiness) to the (IHMO) correct web application project + supporting claass libraries so that we would have control over our namespaces and not get everything compiled into the ASP.x namespace
EDIT: Modified the (hypothetical) example root namespace.
I am trying figure out how I handle events in a dynamically added user control. Basically I can add user controls dynamically to my form (I am then storing them in an ArrayList in a Session variable that I use to reload them on my Page_Load). Each control has a button on it. However, whenever I click the button, the event never fires (code is never reached). I assume it has something to do with the control being dynamic, and when I click a button, it goes out of scope, and when I reload it something is lose in the event handling.
Here's my code for adding a user control:
Code: Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load Dim alContact As New ArrayList If Not IsPostBack Then ' Dummy controls for testing Dim oContact As New ASP.ContactControl
I have a C# web application that dynamically adds user controls to the default page for whatever "mode" the application is in. The problem is that it is not persisting these across postbacks. How do I persist these across postbacks and keep the content of the controls that are in the user control?
For instance, say I have a user control that creates a new tour record. The user clicks on the Tour item from the menu on the default page, it dynamically loads the tours user control. The user then fills out the form in the tours user control and clicks save. This is where the problem happens. When the postback occurs, the web application has no idea that the new tours user control was ever loaded. So, no save takes place because the Save button's click event never even gets fired.
I have user controls with buttons that have hooked events. Controls with events need to be initialized in Page_Load or earlier.
I wish to spawn these user controls dynamically by clicking an Add button.
It is important to remember that events, such as click events, are not fired until just before Page_LoadComplete.
Broken Solution A:
[code]...
Result: Everything works great, except the button within the added user control is inert.
The conundrum is: I need controls to spawned by a button click, which means I need to put my Controls.Add(...) code in Page_LoadComplete. Inversely, I need the controls being added to have working events, which means the Controls.Add(...) code need to be in Page_Load. I have a perfect dichotomy.
I have a formview that has several dropdownlists in the EditItemTemplate. Some of the dropdownlists are added using placeholders. I can add and populate their listitems without any problem. But when I update the record, none of the controls can be found--even though when I look at the page source they are there. I first strated out using asp:ControlParameter in my sqldatasource updateparameters, but even referencing the control as myform$mycontrol did nothing. So then I moved to code behind on the sqldatasource.updating event (code is attached). The only controls I cannot seem to bind to the update are those added via the placeholder.
[Code]....
The item at the dim statement is not an item added using a placeholder and does not get a null reference exception (I used that to prove during debbugging that I wasn't losing my mind)--however, all the items being used to get the parameter values are getting null reference exceptions and are added via placeholders. Here is the code I'm using to set up the dropdownlists:
[Code]....
how to get the value of these controls so they can be used in my update?
How to maintain view state for the dynamically added html controls to a table using javascript(Below is the javascript which I am using to add HTML Controls Dynamically"). Because during the postbacks if I found any error while validating the data present in the dynamically added html controls, the controls are loosing their state and again I need to start adding rows and add data.