2010-05-25 8 views
6

je le code suivant:Vérifiez si la case est cochée ou non - 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> 

Maintenant, j'envoie les variables booléennes à la base de données SQL. Le problème est seulement avec non cochée boîtes. Je veux dire, quand vous cochez certaines cases, il l'envoie comme vrai (et c'est vrai) mais quand je les décoche, il reste le même (vrai).

Ajout: Pourquoi trop peu? est ici une question ... rien de spécial ici

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

le type de données est peu .... je l'ai essayé aussi avec la chaîne ... mais sans succès

post-scriptum - J'ai aussi essayé avec Request.Form [ « pomme »], et décocher travaillé ... mais malheureusement, le chèque ne l'ai pas ... quand je vérifie la case, il me renvoie une erreur:

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

Quelqu'un ?

+0

Trop peu d'information pour voir ce qui se passe. Que se passe-t-il du côté SQL? – Carra

+0

Quel type de données est apple & orange dans la table SQL? –

Répondre

6

Ainsi, après une longue période de combinaisons et d'autres choses, il a travaillé ... Sans javascripts et les champs cachés ... qui est le code .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

Si checkbox id = "apple" a une valeur = "apple" (comme c'est le cas dans votre question), Request.Form ["apple"] si cochée will = 'apple' ... pas 'on' –

0

Tout d'abord je range votre place de code au début du si les déclarations ne sont pas nécessaires:

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

Avez-vous essayé d'utiliser la classe CheckBox au lieu d'entrée?

<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

cela ne fonctionne pas non plus ... je pense qu'il n'y a pas beaucoup de différence entre la case à cocher classe et l'entrée ... aussi, les autres entrées (nom d'utilisateur, passe, etc.) fonctionnent parfaitement ... mais seulement cette case à cocher ne pas, ... –

1

Les cases à cocher non cochées ne sont pas envoyées lorsqu'un formulaire est posté. Vous devrez écrire une solution de contournement.

Une méthode serait d'avoir un champ caché qui est rempli via le javascript de la case à cocher.

+0

alors comment puis-je fais ça? –

+0

omg ... pourquoi si étrange? Je suis sûr qu'il y a une façon plus simple de le faire ... sinon asp aspire –

+0

Ce n'est pas une chose ASP, c'est une chose de spécification HTML. Il dit que tout contrôle qui n'a aucune valeur n'a pas besoin d'être posté. Une case à cocher non cochée n'a aucune valeur. Je voudrais suivre l'autre conseil et essayer d'utiliser un ASP: CheckBox – NibblyPig

0

Cela devrait fonctionner puisque le type de données est bit ... au moins quand vous passez le bool à une procédure stockée.

Puisque vous avez la déclaration de mise à jour de SQL dans votre code, essayez de convertir le bool à un 0 ou 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

j'ai déjà essayé cette méthode ... je l'ai fait avec des boutons radio et ça a fonctionné parfaitement (genre - bit) ... mais cette boite à enfer ne veut tout simplement pas fonctionner correctement ...: ( –

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

S'il vous plaît expliquez votre réponse par des mots, pas seulement du code: en quoi votre réponse diffère-t-elle de toutes les autres? –

0

c'est en fait plus précis pour obtenir les valeurs vérifiées pour un champ d'entrée avec runat = « server ».

chaîne

isAppleChecked = apple.Attributes [ "checked"]! = Null & & apple.Attributes [ "vérifié"] == "checked"? "{vrai faux}";

Questions connexes