简体   繁体   中英

Access dynamically generated control from code behind

I load a piece of html which contains something like:

 <em> < input type="text" value="Untitled" name="ViewTitle" id="ViewTitle" runat="server"> </em>

into my control. The html is user defined, do please do not ask me to add them statically on the aspx page.

On my page, I have a placeholder and I can use

LiteralControl target = new LiteralControl ();

// html string contains user-defined controls
target.text = htmlstring

to render it property. My problem is, since its a html piece, even if i know the input box's id, i cannot access it using FindControl("ViewTitle") (it will just return null) because its rendered as a text into a Literal control and all the input controls were not added to the container's control collections. I definitely can use Request.Form["ViewTitle"] to access its value, but how can I set its value?

Your process is wrong, you are rendering a control to the client with the attribute: runat="server"

This attribute only works if the control was processed by the server, you are just rendering as is

Since your goal is to add a TextBox (correct me if I'm wrong), then why don't you just add a new TextBox to the form's controls collection???

Something like this:

protected void Page_Init(object sender, EventArgs e)
{
    var textbox = new TextBox { ID="myTextBoxID", Text="Some initial value" };

    this.myPlaceHolder.Controls.Add(textbox);
}

And to retrieve it:

var myDynamicTextBox = this.FindControl("myTextBoxID") as TextBox;

I have created several working examples and they are online on my GitHub site, feel free to browse the code

Jupaol's method is the prefer way of adding dynamic control to a page.

If you want to insert string, you can use ParseControl .

However, it doesn't cause compilation for some controls such as PlaceHolder.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM