Chúng tôi có một hộp kiểm mà ban đầu bị vô hiệu hóa và kiểm tra. Sau đó nó được kích hoạt ở phía máy khách thông qua javascript. Nếu người dùng sau đó bỏ chọn hộp và nhấn nút để gọi một postback, trạng thái của hộp kiểm vẫn như kiểm tra ở phía máy chủ. Đây rõ ràng là hành vi không mong muốn. Đây là một ví dụ.Giá trị hộp kiểm ASP.Net lúc đăng lại là sai?
<%@ 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>
Và mã server-side:
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 = "";
}
}
}
Vì vậy, chúng ta phá vỡ tại "chuỗi h" dòng và kiểm tra giá trị của CheckBox1.Checked. Đó là sự thật, ngay cả khi nó được bỏ chọn trên biểu mẫu.
Điều này là do view state of the page của bạn không nhận được cập nhật khi bạn thiết lập thuộc tính kiểm soát của bạn từ mã phía sau. –
Thay vì điều khiển máy chủ sử dụng điều khiển HTML và tôi tin rằng sự cố của bạn đã được giải quyết. –
@Kamran, Viewstate không phải là vấn đề. –