/ / Acceda al control generado dinámicamente desde el código que está detrás: asp.net, devolución de datos, controles dinámicos

Acceda al control generado dinámicamente desde el código que está detrás: asp.net, devolución de datos, controles dinámicos

Cargo un pedazo de html que contiene algo como:

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

en mi control El html está definido por el usuario, por favor, no me pida que los agregue de forma estática en la página aspx.

En mi página, tengo un marcador de posición y puedo usar

LiteralControl target = new LiteralControl ();

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

para hacerla propiedad. Mi problema es que, dado que es una pieza html, incluso si conozco la identificación del cuadro de entrada, no puedo acceder a ella usando FindControl("ViewTitle") (simplemente devolverá el valor nulo) porque se representa como un texto en un control Literal y todos los controles de entrada no se agregaron a las colecciones de control del contenedor. Definitivamente puedo usar Request.Form["ViewTitle"] para acceder a su valor, pero ¿cómo puedo establecer su valor?

Respuestas

0 para la respuesta № 1

El método de Jupaol es la forma preferida de agregar control dinámico a una página.

Si quieres insertar cadena, puedes usar ParseControl.

Sin embargo, no causa compilación para algunos controles como PlaceHolder.


0 para la respuesta № 2

Su proceso es incorrecto, está representando un control para el cliente con el atributo: runat="server"

Este atributo solo funciona si el servidor procesó el control, solo está procesando como es

Ya que tu objetivo es agregar un TextBox (corríjame si estoy equivocado), entonces, ¿por qué no agrega un nuevo TextBox a la forma "s colección de controles ???

Algo como esto:

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

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

Y para recuperarlo:

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

He creado varios ejemplos de trabajo y están en línea en mi sitio de GitHub, siéntase libre de navegar por el código