he perdido desea tener un repetidor de generar un montón de casillas de verificación, por ejemplo .:ASP.NET: ¿Cómo acceder a los elementos de entrada de formulario generados por repetidor?
<tr><td><input type="checkbox" name="t" value="11cbf4deb87" /> <input type="checkbox" name="a" value="33cbf4deb87" />stackoverflow.com</td></tr>
<tr><td><input type="checkbox" name="t" value="11cbf4deb88" /> <input type="checkbox" name="a" value="33cbf4deb87" />microsoft.com</td></tr>
<tr><td><input type="checkbox" name="t" value="11cd3f33a89" /> <input type="checkbox" name="a" value="33cbf4deb87" />gmail.com</td></tr>
<tr><td><input type="checkbox" name="t" value="1138fecd337" /> <input type="checkbox" name="a" value="33cbf4deb87" />youporn.com</td></tr>
<tr><td><input type="checkbox" name="t" value="11009efdacc" /> <input type="checkbox" name="a" value="33bf4deb87" />fantasti.cc</td></tr>
Pregunta 1: ¿Cómo me refiero individualmente cada casilla cuando el repetidor está en funcionamiento para que pueda establecer el valor único?
hacer yo datos se unen con algo como:
<itemtemplate>
<tr>
<td>
<input type="checkbox" name="t"
value="<%# ((Item)Container.DataItem).TangoUniquifier %>" />
<input type="checkbox" name="a"
value="<%# ((Item)Container.DataItem).AlphaUniquifier %>" />
<%# ((Item)Container.DataItem).SiteName %>
</td>
</tr>
</itemtemplate>
O se supone que debo configurar de alguna manera en el OnItemDataBound?
<asp:repeater id="ItemsRepeater"
OnItemDataBound="ItemsRepeater_OnItemDataBound" runat="server">
...
<itemtemplate>
<tr>
<td>
<input id="chkTango" type="checkbox" name="t" runat="server" />
<input id="chkAlpha" type="checkbox" name="a" runat="server" />
<%# ((Item)Container.DataItem).SiteName %>
</td>
</tr>
</itemtemplate>
...
</asp:repeater>
protected void ItemsRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
// if the data bound item is an item or alternating item (not the header etc)
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
// get the associated item
Item item = (Item)e.Item.DataItem;
//???
this.chkTango.Value = item.TangoUniquifier;
this.chkAlpha.Value = item.AlphaUniquifier;
}
}
Pero si se supone que debo hacer referencia a ella en el código subyacente, ¿cómo hacer referencia a ella en el código subyacente? ¿Se supone que debo referenciarlo usando la propiedad de identificación (del lado del servidor) de un control <INPUT>
? me doy cuenta de que la ID de un control en el lado del servidor no es lo mismo que la ID que estará presente en el cliente.
¿O tengo que hacer algo donde tengo que encontrar un control INPUT con un nombre de "t" y otro con un nombre de "a"? ¿Y qué tipo de control es un CheckBox que me permite establecer su valor de entrada?
protected void ItemsRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
// if the data bound item is an item or alternating item (not the header etc)
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
// get the associated item
Item item = (Item)e.Item.DataItem;
CheckBox chkTango = (CheckBox)e.Item.FindControl("chkTango");
chkTango.Value = item.TangoUniquifier;
CheckBox chkAlpha = (CheckBox)e.Item.FindControl("chkAlpha");
chkAlpha.Value = item.AlphaUniquifier;
}
}
Pregunta 2: Cuando el usuario hace clic en Enviar posteriores, ¿cómo puedo encontrar todas las casillas revisadas, o más específicamente sus valores?
¿Debo FindControl?
protected void DoStuffWithLinks_Click(object sender, EventArgs e)
{
// loop through the repeater items
foreach (RepeaterItem repeaterItem in actionItemRepeater.Items)
{
Item item = repeaterItem.DataItem as Item;
// grab the checkboxes
CheckBox chkAlpha = (CheckBox)repeaterItem.FindControl("chkAlpha");
CheckBox chkTango = (CheckBox)repeaterItem.FindControl("chkTango");
if (chkAlpha.Checked)
{
item.DoAlphaStuff(chkAlpha.Name);
}
if (chkTango.Checked)
{
item.DoTangoStuff(chkTango.Name);
}
}
}
¿Los elementos del repetidor DataItem siguen ahí en un controlador de eventos de clic?
¿Cuál es la forma preferida de saber qué casilla de verificación es esta? Habrá docenas de casillas de verificación "lo que sea". Es apropiado usar checkbox.Attributes ["value"]? –
He actualizado la respuesta con una forma de emparejar la casilla de verificación (o cualquier control) en un repetidor usando un campo oculto. –
No se olvide: if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) {... –