Hier ist ein kurzes Modell, wie ich in der Vergangenheit ähnlich gemacht habe.
<asp:Repeater id="repeater1" runat="server" OnItemDataBound="repeater1_OnItemDataBound" >
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" OnCheckedChanged="Check_Changed" AutoPostBack="true" />
</ItemTemplate>
</asp:Repeater>
Code-Behind:
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.
}
}
Dank dieser Arbeit sollte. Wünschte, es gäbe einen weniger runden Weg ... +1 – Jason
Es hängt davon ab, was Sie mit den Daten zu tun versuchen. Wenn es sich um ein einfaches Datenbank-Flag-Update für eine einzelne Zeile handelt, wäre ein AJAX-Rückruf, der über JQuery angeschlossen wird, ein besserer und saubererer Ansatz. In der Tat ist es wahrscheinlich ein sauberer Ansatz, egal was Sie mit den Daten tun. Es würde Benutzern erlauben, mehrere Checkboxen ohne Postbacks zu ändern. –
Das habe ich getan. Danke für das Modell. Es zeigte deutlich, wie übermäßig kompliziert es war und steuerte mich in der JQuery-Richtung. = D – Jason