ASP复选框'已检查'属性总是返回true

时间:2014-09-10 14:44:07

标签: c# jquery asp.net

我的网络表单上有几个asp:checkboxes,它们在页面加载时填写,然后在按钮提交时返回。

按钮总是返回与它们后面的服务器boolean相同,无论是否在返回之前在客户端更改。在检查变量的clientID之后,它们完全相同,因此它不是任何隐藏的ID或类似的东西。

ASPX

<script type="text/javascript"> 
    function slideTable(link) {
        $(link).parent().next().toggle()
        $(link).find(".navPlus").toggleClass("rotate1");
        $(link).find(".navPlus").toggleClass("rotate");
        var txt = $(link).parent().next().is(':visible') ? 'Minimise' : 'View all';
        $(link).find(".navPlus").text(txt);
    };
      function boxchange(box) {
        //Change has already happened at this point
        if ($(box).prop("checked")==true) {

            $(box).attr("checked", "checked");

        }
        else {
            $(box).removeAttr("checked");
        }


        var table = $(box).closest('table');
        var allChecked = $('#subjectsTable :checkbox:checked').length == $('#subjectsTable :checkbox').length;
        if (allChecked) {
            $(table).prev().find(":input").prop("checked", true);
            $(table).prev().find(":input").attr("checked", true);
        }
        else {
            $(table).prev().find(":input").prop("checked", false);
            $(table).prev().find(":input").attr("checked", false);
        }
    };
</script>

<div>
    <span  class="headerSpan" onclick="slideTable(this)"  style="clear:both" >
        <img class="logo-image" alt="HalsburyLogo" src="../images/siteStyle/logo.png"/>
        <span class="navPlus rotate1">View all</span>      
    </span>  
    <input onclick="chkHeader_click(this)" style="float:none; display:inline" type="checkbox" id="chkSubjects"/>
</div>

<table id="subjectsTable" class="subscriptionTable">
        <tr>
            <td style="width: 300px">
                <label>Art</label></td>
            <td>
                <asp:CheckBox onclick="boxchange(this)" ID="chkArt" CssClass="chkSubject" runat="server" /></td>
        </tr>
</table>

单击提交按钮时,chkArt的值始终相同。 - 检查时,服务器端的chkArt的clientID也是chkArt

编辑:在页面加载事件中,存在以下代码:

chkArt.Checked = //a bool from the database

1 个答案:

答案 0 :(得分:0)

chkArt.Checked = //a bool from the database

此代码位于Page_Load?除非您有条件地运行此代码(至少在问题中没有...),否则每次页面加载时都会执行。只要对页面,回发或其他方式发出请求,就会调用Page_Load

所以基本上你的页面正在接收更改的值,但忽略它们只是将它们重置为以前的状态。

您可以在Page_Load中有条件地检查回发:

if (!IsPostBack)
    chkArt.Checked = //a bool from the database

这样,CheckBox的初始状态仅在页面的初始加载时设置,而不是在每次回发时重新设置。