ASP.Net Checkbox值在回发错误?

前端之家收集整理的这篇文章主要介绍了ASP.Net Checkbox值在回发错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个初始禁用和检查的复选框。然后在客户端通过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的值。这是真的,即使它在表单上未被选中。

解决方法

这是ASP.NET的一个已知问题 – 由于某些原因ASP.NET将不会更新回发的复选框,如果在页面加载期间被禁用并且没有检查回发。我不知道为什么是这样的 – 如果您在默认情况下取消选中该复选框,并选择它,则该值在服务器上正确更改。

解决方法是将一个隐藏的字段添加到表示复选框状态的页面中,然后将该字段的值更新为“ON”或“OFF”,例如,每当点击复选框。

然后在服务器上检查隐藏字段的值,而不是复选框本身,因为隐藏字段始终发布。

猜你在找的asp.Net相关文章