Tenemos una casilla de verificación que inicialmente está desactivada y marcada. Luego se habilita en el lado del cliente a través de javascript. Si el usuario luego desmarca la casilla y presiona el botón para invocar una devolución de datos, el estado de la casilla de verificación permanece como verificado en el lado del servidor. Esto es obviamente un comportamiento indeseable. Aquí hay un ejemplo.El valor de casilla de verificación de ASP.Net en la devolución de datos es incorrecto?
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testcb.aspx.cs" Inherits="ESC.testcb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<script type="text/javascript">
function buttonClick() {
var cb = document.getElementById('<%= CheckBox1.ClientID %>');
cb.disabled = false;
cb.parentNode.disabled = false;
}
</script>
<div>
<asp:CheckBox ID="CheckBox1" runat="server" Checked="true" Enabled="false" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="buttonClick(); return false;" />
<asp:Button ID="Button2" runat="server" Text="Button2" OnClick="button2Click" />
</div>
</form>
</body>
</html>
Y el código del lado del servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ESC
{
public partial class testcb : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void button2Click(object sender, EventArgs e)
{
string h = "";
}
}
}
Así que rompen en la línea de "cadena H" y comprobar el valor de CheckBox1.Checked. Es cierto, incluso si no está marcado en el formulario.
Esto es debido a que el estado de vista de su página no está siendo actualizado cuando se establece el propiedades de su control del código detrás. –
En lugar de controlar el servidor, use un control HTML y creo que su problema está resuelto. –
@ Kamran, Viewstate no es el problema. –