Ecco un rapido esempio di come ho fatto in passato.
<asp:Repeater id="repeater1" runat="server" OnItemDataBound="repeater1_OnItemDataBound" >
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" OnCheckedChanged="Check_Changed" AutoPostBack="true" />
</ItemTemplate>
</asp:Repeater>
codebehind:
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.
}
}
fonte
2010-08-25 14:41:46
Grazie questo dovrebbe funzionare. Vorrei che ci fosse un modo meno rotondo ... +1 – Jason
Dipende da cosa stai cercando di fare con i dati. Se si tratta di un semplice aggiornamento del flag di database per una singola riga, un callback AJAX collegato tramite JQuery sarebbe un approccio migliore e più pulito. In effetti, è probabilmente un approccio più pulito, indipendentemente da ciò che si sta facendo con i dati. Permetterebbe agli utenti di cambiare più checkbox senza postback. –
Questo è quello che ho finito per fare. Grazie per il mockup però. Ha chiaramente dimostrato quanto fosse eccessivamente complicato e mi ha guidato nella direzione di JQuery. = D – Jason