/ / item.Selected è falso quando la checkboxlist è disabilitata. - c #, asp.net

item.Selected è false quando la checkboxlist è disabilitata. - c #, asp.net

Ho un elenco di controllo in cui alcuni elementi sono disabilitati per determinati utenti.

inserisci la descrizione dell'immagine qui

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 № 1

Se 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.