2010-05-25 16 views
6

ho il seguente codice:Controllare se la casella è selezionata o meno - ASP.NET

(some.aspx.cs)

 if(Page.IsPostBack) 
     { 
     bool apple2 = false; 
     bool pizza2 = false; 
     bool orange2 = false; 
     if (apple.Checked) 
      apple2 = true; 
     if (pizza.Checked) 
      pizza2 = true; 
     if (orange.Checked) 
      orange2 = true; 
     } 

(some.aspx)

 <tr> 
    <td>Food:</td> 
    <td>Apple <input type="checkbox" name="food" id="apple" value="apple" runat="server" />Pizza <input type="checkbox" name="food" id="pizza" value="pizza" runat="server" />Orange <input type="checkbox" name="food" id="orange" value="orange" runat="server" /></td> 
</tr> 

Ora invio le variabili booleane al database SQL. Il problema riguarda solo le caselle deselezionate. Voglio dire, quando controlli qualche checkbox lo invia come vero (e giusto) ma quando li deseleziono rimane lo stesso (vero).

Aggiunta: Perché troppo poco? ecco una query ... niente di speciale qui

string q = string.Format(@"UPDATE tblUsers SET ......., apple='{8}', orange='{9}' WHERE id='{10}'", ...., apple2, orange2, id); 
lib.sql_query(q); // using my sql library... 

il tipo di dati è po '.... ho provato anche con lo spago ... ma senza successo

P.S. - Ho anche provato con Request.Form [ "mela"], e il deselezionare funzionato ... ma purtroppo l'assegno non ... quando posso controllare la casella di controllo che mi genera un errore:

Conversion failed when converting the varchar value 'on' to data type bit. 

Somebody ?

+0

Troppe poche informazioni per vedere cosa sta succedendo. Cosa succede sul lato SQL? – Carra

+0

Quale tipo di dati è mela e arancione nella tabella SQL? –

risposta

6

Così, dopo un lungo periodo di combinazioni e altre cose ha funzionato ... Senza alcun javascript e campi nascosti ... che il codice cs

 bool apple2 = (Request.Form["apple"] == "on") ? true : false; 
     bool orange2 = (Request.Form["orange"] == "on") ? true : false; 
     bool pizza2 = (Request.Form["pizza"] == "on") ? true : false; 
+0

Se checkbox id = "apple" ha un valore = "apple" (come nel caso della tua domanda), Request.Form ["apple"] se selezionato will = 'apple' ... not 'on' –

0

In primo luogo vorrei riordinare il codice fino all'inizio del se le dichiarazioni sono inutili:

if (Page.IsPostback) 
{ 
    bool appleSelected = apple.Checked; 
    bool pizzaSelected = pizza.Checked; 
    bool orangeSelected = orange.Checked; 
} 

Hai provato a usare la classe al posto di ingresso CheckBox?

<asp:CheckBox id="apple" value="apple" runat="server" Checked="True|False" /> 
<asp:CheckBox id="pizza" value="pizza" runat="server" Checked="True|False" /> 
<asp:CheckBox id="orange" value="orange" runat="server" Checked="True|False" /> 
+0

anche questo non funziona ... penso non ci sia molta differenza tra la classe di controllo e l'input ... anche, gli altri input (username, pass ecc.) Funzionano perfettamente ... ma solo questa casella di controllo non ... –

1

caselle di controllo non selezionate non sono presentati quando un modulo viene inviato. Dovrai scrivere una soluzione alternativa.

Un metodo consiste nell'avere un campo nascosto che viene popolato tramite il javascript della casella di controllo.

+0

così come faccio Fai questo? –

+0

omg ... perché così strano modo? sono sicuro che c'è un modo più semplice per farlo ... altrimenti asp sucks –

+0

Non è una cosa asp, è una cosa specifica HTML. Dice che qualsiasi controllo che non ha valore non ha bisogno di essere pubblicato. La casella di controllo deselezionata non ha valore. Seguirò l'altro consiglio e proverò ad usare un asp: CheckBox – NibblyPig

0

Dovrebbe funzionare poiché il tipo di dati è bit ... almeno quando si passa il bool a una stored procedure.

Dal momento che hai l'istruzione UPDATE SQL nel codice, provare a convertire il bool a un 0 o 1.

Int16 iApple = (apple2) ? 1 : 0; 
Int16 iOrange = (orange2) ? 1 : 0; 
string query = string.Format(@"UPDATE tblUsers SET ......., apple='{8}', orange='{9}' WHERE id='{10}'", ...., iApple, iOrange, id); 
lib.sql_query(q); 
+0

ho già provato questo metodo ... l'ho fatto con i pulsanti di opzione e ha funzionato perfettamente (genere - bit) ... ma questo inferno non funziona correttamente ...: ( –

0
using System.Data.SqlClient; 
using System.Data; 

public partial class _Default : System.Web.UI.Page 
{ 
    SqlConnection con = new SqlConnection("Data Source=RND3 " + "\\" + " SQLEXPRESS;Initial Catalog=SSSolutionFiles;Integrated Security=True"); 
    public void displaygrid() 
    { 
     SqlDataAdapter da = new SqlDataAdapter("select * from userfile", con); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "p"); 
     GridView1.DataSource = ds.Tables["p"]; 
     GridView1.DataBind(); 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Label1.Text = txtUserName.Text + "<br>" + txtPassword.Text + "<br>" + txtConfirmPassword.Text + "<br>" + txtConfirmationNumber.Text; 
     displaygrid(); 
     if (!IsPostBack) 
      BindDropDownListData(); 
    } 

    public void BindDropDownListData() 
    { 
     //SqlConnection con = new SqlConnection("Data Source=RND3 " + "\\" + " SQLEXPRESS;Initial Catalog=SSSolutionFiles;Integrated Security=True"); 
     //SqlConnection mySqlConnection = new SqlConnection(); 
     { 
      try 
      { 
       con.Open(); 
       SqlCommand mySqlCommand = new SqlCommand("Select username from userfile ", con); 
       SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySqlCommand); 
       DataSet myDataSet = new DataSet(); 
       mySqlDataAdapter.Fill(myDataSet); 
       //DropDownList1.DataSource = myDataSet; 
       //DropDownList1.DataTextField = "username"; 
       //DropDownList1.DataValueField = "username"; 
       //DropDownList1.DataBind(); 
       CheckBoxList1.DataSource = myDataSet; 
       CheckBoxList1.DataTextField = "username"; 
       CheckBoxList1.DataValueField = "username"; 
       CheckBoxList1.DataBind(); 
      } 
      catch (Exception ex) 
      { 
       Label1.Text = ex.Message; 
      } 
      finally 
      { 
       con.Close(); 
      } 
     } 
    } 
    protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("insert into userfile values('" + txtUserName.Text + "','" + txtPassword.Text + "','" + txtConfirmPassword.Text + "','" + txtConfirmationNumber.Text + "')", con); 
     con.Open(); 
     cmd.ExecuteScalar(); 
     displaygrid(); 
     BindDropDownListData(); 
    } 
    protected void btnUpdate_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("update userfile set confirmnumber='" + txtConfirmationNumber.Text + "', password='" + txtPassword.Text + "',confirmpassword='" + txtConfirmPassword.Text + "' where username='" + txtUserName.Text + "' ", con); 
     con.Open(); 
     cmd.ExecuteScalar(); 
     displaygrid(); 
    } 
    protected void btnDelete_Click(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("delete from userfile where username='" + txtUserName.Text + "' ", con); 
     con.Open(); 
     cmd.ExecuteScalar(); 
     displaygrid(); 
     BindDropDownListData(); 
    } 
    protected void btnClear_Click(object sender, EventArgs e) 
    { 
     txtConfirmationNumber.Text = ""; 
     txtUserName.Text = ""; 
     txtConfirmPassword.Text = ""; 
     txtPassword.Text = ""; 
    } 
    protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (CheckBox1.Checked == true) 
     { 
      foreach (ListItem checkboxitems in CheckBoxList1.Items) 
      { 
       checkboxitems.Selected = true; 
      } 
     } 
     else if (CheckBox1.Checked == false) 
     { 
      foreach (ListItem listItem in CheckBoxList1.Items) 
      { 
       listItem.Selected = false; 
      } 
     } 
    } 
} 
+0

Please spiega anche la tua risposta a parole, non solo codice. In che modo la tua risposta è diversa da tutte le altre? –

0

questo è in realtà più accurato per ottenere i valori controllato per un campo di input con runat = "server".

stringa isAppleChecked = apple.Attributes [ "controllato"]! = Null & & apple.Attributes [ "controllati"] == "controllato"? "{vero falso}";

Problemi correlati