Ho un elenco di controllo in cui alcuni elementi sono disabilitati per determinati utenti.
Quando faccio clic su "Salva", viene eseguito il codice seguente.
foreach (ListItem item in myCheckBoxList.Items)
{
if (!item.Selected)
{
continue;
}
selectedValues.Add(item.Value);
}
Tuttavia, item.Selected restituisce false per gli elementi disabilitati anche se sono stati selezionati.
C'è un modo per aggirare questo?
risposte:
1 per risposta № 1Se la ListItems
della CheckBoxList vengono aggiunti anche con aspnetnel codice dietro o nella pagina .aspx, ViewState assicurerà che vedrà quelle caselle di controllo disabilitate come selezionate, anche se non vengono inviate al server.
protected void Button1_Click(object sender, EventArgs e)
{
List<string> selectedValues = new List<string>();
Label1.Text = "";
foreach (ListItem item in myCheckBoxList.Items)
{
if (item.Selected)
{
selectedValues.Add(item.Value);
Label1.Text += item.Value + "<br>";
}
}
}
E per completare l'esempio:
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<br /><br />
<asp:CheckBoxList ID="myCheckBoxList" runat="server">
<asp:ListItem Text="Blueberry" Value="Blueberry"></asp:ListItem>
<asp:ListItem Text="Raspberry" Value="Raspberry"></asp:ListItem>
<asp:ListItem Text="Blackberry" Value="Blackberry"></asp:ListItem>
<asp:ListItem Text="Strawberry" Value="Strawberry" Enabled="false" Selected="True"></asp:ListItem>
<asp:ListItem Text="Gooseberry" Value="Gooseberry" Enabled="false" Selected="True"></asp:ListItem>
</asp:CheckBoxList>
<br /><br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
3 per risposta № 2
Gli input disabilitati non vengono mai registrati sul server, quindi verranno impostati sul valore predefinito, ovvero false. Puoi usare HiddenField
e associarlo a ciascuna casella di controllo e impostarne il valore in base alla selezione.