Aquí hay una maqueta rápida de cómo he hecho algo similar en el pasado.
<asp:Repeater id="repeater1" runat="server" OnItemDataBound="repeater1_OnItemDataBound" >
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" OnCheckedChanged="Check_Changed" AutoPostBack="true" />
</ItemTemplate>
</asp:Repeater>
código subyacente:
public class Model {
public int Id { get; set; }
public string Name { get; set; }
}
public partial class Checkboxes : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if(!IsPostBack) {
repeater1.DataSource = new List<Model> {
new Model { Id = 1, Name = "a" },
new Model { Id = 2, Name = "b" },
new Model { Id = 3, Name = "c" } };
repeater1.DataBind();
}
}
protected void repeater1_OnItemDataBound(Object sender, RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
var item = e.Item.DataItem as Model;
if (item != null) {
var chk = e.Item.FindControl("chk") as CheckBox;
if (chk != null) {
chk.Text = item.Name;
chk.InputAttributes.Add("value", item.Id.ToString());
}
}
}
}
protected void Check_Changed(Object sender, EventArgs e) {
var id = ((CheckBox) sender).InputAttributes["value"];
//you now have access to the item id and can manipulate at will.
}
}
Gracias esto debería funcionar. Ojalá hubiera un camino menos redondo ... +1 – Jason
Depende de lo que intentes hacer con los datos. Si se trata de una actualización de indicador de base de datos simple para una sola fila, una devolución de llamada AJAX conectada a través de JQuery sería un enfoque mejor y más limpio. De hecho, es probable que sea un enfoque más limpio, sin importar lo que esté haciendo con los datos. Permitiría a los usuarios cambiar varias casillas de verificación sin devoluciones. –
Eso es lo que terminé haciendo. Gracias por la maqueta sin embargo. Esto ilustró claramente lo excesivamente complicado que era y me guió en la dirección de JQuery. = D – Jason