c# asp.net textbox repeater

c# - Acceso a cuadros de texto en el control de repetidor



asp.net textbox (3)

Todas las formas en las que puedo pensar para hacer esto parecen muy piratas. ¿Cuál es la forma correcta de hacer esto, o al menos la más común?

Estoy recuperando un conjunto de imágenes de una consulta de LINQ-a-SQL y enlazándolas y algunos otros datos a un repetidor. Necesito agregar un cuadro de texto a cada elemento en el repetidor que permita al usuario cambiar el título de cada imagen, muy similar a Flickr.

¿Cómo accedo a los cuadros de texto en el control del repetidor y sé a qué imagen pertenece ese cuadro de texto?

Aquí es cómo se vería el control del repetidor, con un botón de envío que actualizaría todas las filas de imágenes en Linq-to-SQL:

texto alternativo http://casonclagg.com/layout.jpg

Editar:

Este codigo funciona

Solo asegúrate de no destruir tus valores mediante el enlace fuera de if ((Page.IsPostBack) como yo .. Vaya.

<asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <div class="itemBox"> <div class="imgclass"> <a title=''<%# Eval("Name") %>'' href=''<%# Eval("Path") %>'' rel="gallery"> <img alt=''<%# Eval("Name") %>'' src=''<%# Eval("Path") %>'' width="260" /> </a> </div> <asp:TextBox ID="TextBox1" Width="230px" runat="server"></asp:TextBox> </div> </ItemTemplate> </asp:Repeater>

Y haga clic en Enviar:

protected void Button1_Click(object sender, EventArgs e) { foreach (RepeaterItem item in Repeater1.Items) { TextBox txtName = (TextBox)item.FindControl("TextBox1"); if (txtName != null) { string val = txtName.Text; //do something with val } } }


¿Has intentado algo como seguir en el clic del botón: -

foreach (RepeaterItem item in Repeater1.Items) { TextBox txtName= (TextBox)item.FindControl("txtName"); if(txtName!=null) { //do something with txtName.Text } Image img= (Image)item.FindControl("Img"); if(img!=null) { //do something with img } }

/ * Donde txtName e Img son los identificadores del cuadro de texto y los controles de imagen respectivamente en el repetidor. * /

Espero que esto ayude.


.aspx

<asp:Repeater ID="rpt" runat="server" EnableViewState="False"> <ItemTemplate> <asp:TextBox ID="txtQty" runat="server" /> </ItemTemplate> </asp:Repeater>

.cs

foreach (RepeaterItem rptItem in rpt.Items) { TextBox txtQty = (TextBox)rptItem.FindControl("txtQty"); if (txtQty != null) { Response.Write(txtQty.Text); } }

Asegúrese de agregar EnableViewState = "False" a su repetidor, de lo contrario obtendrá una cadena vacía. (Que malgasté mi tiempo, no malgastes el tuyo :))


En la devolución de datos, puede iterar sobre la colección de RepeaterItems en repeater.Items. A continuación, puede recuperar cada TextBox con un código como

TextBox tbDemo = (TextBox)rptr.Items[index].FindControl("textBox");