2010-05-25 19 views
6

Ich habe den folgenden Code:Überprüfen Sie, ob das Kontrollkästchen aktiviert ist oder nicht - 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> 

Jetzt sende ich die booleschen Variablen an SQL-Datenbank. Das Problem ist nur mit unkontrollierten Boxen. Ich meine, wenn Sie ein paar Checkboxen markieren, wird es als wahr (und das ist richtig) gesendet, aber wenn ich sie deaktiviere, bleibt es gleich (wahr).

Zusatz: Warum zu wenig? hier eine Abfrage ... nichts Besonderes hier

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

der Datentyp Bit ist .... Ich habe auch versucht, mit String ... aber kein Erfolg

P. S. - i auch mit Request.Form [ „apple“] versucht, und der uncheck gearbeitet ... aber leider ist die Überprüfung nicht ... wenn ich die Checkbox es wirft mir einen Fehler:

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

Jemand ?

+0

Zu wenig Informationen, um zu sehen, was passiert. Was passiert auf der SQL-Seite? – Carra

+0

Welcher Datentyp ist Apple & Orange in der SQL-Tabelle? –

Antwort

6

So nach langer Zeit von Kombinationen und andere Sachen es funktionierte ... Ohne javascripts und Feldern versteckt ... , die dem .cs Code ist

 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

Wenn checkbox id = "apple" einen Wert = "apple" hat (wie in Ihrer Frage), Request.Form ["apple"] wenn aktiviert, wird = 'apple' ... nicht 'on' –

0

Zunächst möchte ich den Code bis zu Beginn ordentlich die if-Anweisungen nicht notwendig sind:

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

Haben Sie versucht, mit der CheckBox Klasse statt Eingang?

<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

das funktioniert auch nicht ... Ich denke, es gibt keinen großen Unterschied zwischen Checkbox-Klasse und Eingabe ... auch, die anderen Eingaben (Benutzername, Pass usw.) funktionieren perfekt ... aber nur diese Checkbox nicht, ... –

1

Nicht markierte Kontrollkästchen werden nicht gesendet, wenn ein Formular gesendet wird. Sie müssen eine Problemumgehung schreiben.

Eine Methode wäre, ein verstecktes Feld zu haben, das über das Javascript der Checkbox bevölkert wird.

+0

so wie ich mach das? –

+0

omg ... warum so seltsam? Ich bin sicher, dass es einen einfacheren Weg gibt, um das zu tun ... sonst saugt asp –

+0

Es ist kein asp Ding, es ist eine HTML-Spezifikation Sache. Es besagt, dass jedes Steuerelement, das keinen Wert hat, nicht gebucht werden muss. Ein nicht markiertes Kontrollkästchen hat keinen Wert. Ich würde dem anderen Rat folgen und versuchen, eine Asp zu verwenden: CheckBox – NibblyPig

0

Es sollte funktionieren, da der Datentyp Bit ist ... zumindest wenn Sie das Bool an eine gespeicherte Prozedur übergeben.

Da Sie die SQL-Update-Anweisung in Ihrem Code haben, versuchen Sie den Bool auf eine 0 oder 1. Umwandlung

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

ich habe diese methode schon ausprobiert ... ich habe das mit radio buttons gemacht und es hat perfekt funktioniert (gender - bit) ... aber diese höllenboxen wollen einfach nicht richtig funktionieren ...: ( –

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

Bitte erkläre deine Antwort nicht nur in Code, sondern auch in Worten: Wie unterscheidet sich deine Antwort von allen anderen? –

0

Dies ist eigentlich genauer die geprüften Werte für ein Eingabefeld zu bekommen mit runat = „server“.

String isAppleChecked = apple.Attributes [ "geprüft"]! = Null & & apple.Attributes [ "geprüft"] == "geprüft"? "{wahr falsch}";

Verwandte Themen