我们有一个初始禁用和检查的复选框。然后在客户端通过javascript启用它。如果用户然后取消选中该框并按下按钮来调用回发,则复选框的状态将保持在服务器端的检查状态。这显然是不良行为。这是一个例子。
<%@ 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>
和服务器端代码:
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 = ""; } } }
所以我们在“string h”行中断,并检查CheckBox1.Checked的值。这是真的,即使它在表单上未被选中。