ich bin ein Repeater eine Reihe von Kontrollkästchen erzeugen zu wollen, z.B .:ASP.NET: Wie auf Repeater generierte Formulareingabeelemente zugreifen?
<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>
Frage 1: Wie einzeln i jedes Kontrollkästchen Referenz, wenn der Repeater läuft, so kann ich den einzigartigen Wert eingestellt?
Do i Daten-bind es mit so etwas wie:
<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>
Oder soll ich es in der OnItemDataBound irgendwie einstellen?
<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;
}
}
Aber wenn ich soll es in den Code-behind verweisen, wie verweisen ich es im Code-behind? Soll ich es mit der (serverseitigen) ID-Eigenschaft eines <INPUT>
-Steuerelements referenzieren? Ich stelle fest, dass die ID eines Steuerelements auf der Serverseite nicht mit der ID identisch ist, die auf dem Client vorhanden sein wird.
Oder muss ich etwas tun, wo ich ein INPUT-Steuerelement mit dem Namen "t" und ein anderes mit dem Namen "a" finden muss? Und welche Art von Kontrolle ist eine CheckBox, mit der ich den Eingabewert einstellen kann?
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;
}
}
Frage 2: Wenn der Benutzer später Klicks Zustellen, wie kann ich alle überprüft Kontrollkästchen zu finden, oder genauer gesagt ihre Werte?
Muss ich FindControl?
Sind die Repeaterelemente DataItem immer noch auf einem Klickereignishandler vorhanden?
Was ist der bevorzugte Weg zu wissen, welche Checkbox das ist? Es wird Dutzende von "was auch immer" -Kontrollkästchen geben. Es ist richtig, Checkbox.Attributes ["Wert"] zu verwenden? –
Ich habe die Antwort mit einer Möglichkeit aktualisiert, das Kontrollkästchen (oder ein beliebiges Steuerelement) in einem Repeater mit einem versteckten Feld abzugleichen. –
Nicht vergessen: if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) {... –