我的网络表单上有几个asp:checkboxes
,它们在页面加载时填写,然后在按钮提交时返回。
按钮总是返回与它们后面的服务器boolean相同,无论是否在返回之前在客户端更改。在检查变量的clientID之后,它们完全相同,因此它不是任何隐藏的ID或类似的东西。
<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
答案 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
的初始状态仅在页面的初始加载时设置,而不是在每次回发时重新设置。