2010-05-25 30 views
6

tengo el siguiente código:Compruebe si la casilla está marcada o no - 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> 

Ahora, envío las variables booleanas a la base de datos SQL. El problema es solo con cajas sin marcar. Quiero decir, cuando marcas algunas casillas de verificación, las envía como verdaderas (y eso es correcto), pero cuando las desactivo, siguen siendo las mismas (verdaderas).

Adición: ¿Por qué demasiado poco? aquí es una consulta ... nada especial aquí

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

el tipo de datos es poco .... He intentado también con una cuerda ... pero sin éxito

P. S. - i también trató con Request.Form [ "manzana"], y el desmarque trabajado ... pero por desgracia, el cheque no hice ... cuando me marca la casilla que me tira un error:

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

Alguien ?

+0

Muy poca información para ver qué está pasando. ¿Qué pasa en el lado de SQL? – Carra

+0

¿Qué tipo de datos es manzana y naranja en la tabla SQL? –

Respuesta

6

Así que después de un largo tiempo de combinaciones y otras cosas funcionó ... Sin ningún tipo de javascript y los campos ocultos ... que es el código .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" tiene un valor = "apple" (como es el caso en su pregunta), Request.Form ["apple"] si está marcado will = 'apple' ... not 'on' –

0

En primer lugar me ponga en orden su código a principios del si las declaraciones son innecesarias:

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

¿Ha intentado utilizar la clase en lugar de entrada 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

esto tampoco funciona ... Creo que no hay mucha diferencia entre la clase de casilla de verificación y la entrada ... también, las otras entradas (nombre de usuario, pase, etc.) funcionan perfectamente ... pero solo esta casilla de verificación no, ... –

1

Las casillas no marcadas no se envían cuando se publica un formulario. Deberá escribir una solución alternativa.

Un método sería tener un campo oculto que se rellena mediante el javascript de la casilla de verificación.

+0

entonces ¿cómo hago yo? ¿hacer esto? –

+0

omg ... ¿por qué tan extraña manera? Estoy seguro de que hay una manera más simple de hacer esto ... de lo contrario, asp sucks –

+0

No es una cosa áspid, es algo de especificación HTML. Dice que ningún control que no tenga valor no necesita ser publicado. Una casilla de verificación sin marcar no tiene valor. Seguiría el otro consejo e intentaré usar un asp: CheckBox – NibblyPig

0

Debería funcionar dado que el tipo de datos es poco ... al menos cuando pasa el bool a un procedimiento almacenado.

Puesto que usted tiene la instrucción de actualización SQL en su código, intente convertir el 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

intenté este método ya ... lo hice con botones de radio y funcionó perfectamente (género - bit) ... pero estas cajas de infierno simplemente no quieren funcionar correctamente ...: ( –

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 explique su respuesta en palabras también, no solo en el código. ¿Cómo difiere su respuesta de todas las demás? –

0

Esto es en realidad más precisa para obtener los valores controladas para un campo de entrada con runat = "server".

cadena isAppleChecked = apple.Attributes [ "marcada"]! = Null & & apple.Attributes [ "comprueban"] == "comprueban"? "{verdadero Falso}";

Cuestiones relacionadas