Вопрос

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?

Это было полезно?

Решение

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.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top