我有一个带autopostback的复选框。此复选框将隐藏/显示数据网格中的列。我希望在回发发生时禁用/读取复选框,以避免双击或服务器错误。我知道禁用复选框不会通过回发保留值。从我在其他类似问题中读到的内容,我需要创建一个隐藏的输入并指定我的复选框的值。我现在如何拥有它,隐藏输入在回发后总是具有false值。任何建议/帮助将不胜感激。
*仅显示相关代码。
ASPX:
<asp:CheckBox ID="chkbxEmailPhone" runat="server" Text="Include Telephone & E-Mail" AutoPostBack="true" CssClass="bold tdfont10" value="<%=hidPhoneEmail%>" name="EmailPhoneCheck"></asp:CheckBox>
<input type="hidden" id="hidChkBxValue" value=" <%=hidPhoneEmail%>" name="EmailPhoneCheck"/>
使用Javascript:
function fnDisableChkBox(){
if(document.getElementById("chkbxEmailPhone").checked = true){
document.getElementById("hidChkBxValue").value = "true";
}
else {
document.getElementById("hidChkBxValue").value = "false";
}
document.getElementById("chkbxEmailPhone").disabled = true;
}
VB.NET:在Page_PreRender
中'Declared normally - not in prerender
Public hidPhoneEmail As String = String.Empty
chkbxEmailPhone.Attributes.Add("onChange", "fnDisableChkBox(this);")
hidPhoneEmail = Request.Form("hidPhoneEmail")
If hidPhoneEmail = "true" Then
chkbxEmailPhone.Checked = True
Else
chkbxEmailPhone.Checked = False
End If
答案 0 :(得分:0)
尝试使用HiddenField控件,因为很容易在PostBack上获取它的值。
<asp:CheckBox ID="chkbxEmailPhone" runat="server" Text="Include Telephone & E-Mail" AutoPostBack="true" value="<%=hidChkBxValue%>" name="EmailPhoneCheck"></asp:CheckBox>
<asp:HiddenField ID="hidChkBxValue" runat="server" Value="" />
然后您的PreRender事件处理程序将变为以下内容。您不应该需要第三个隐藏值“hidPhoneEmail”,所以只需将hidChkBxValue.Value =“false”替换为您首先确定的值。
Private Sub Page_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
chkbxEmailPhone.Attributes.Add("onChange", "fnDisableChkBox(this);")
If hidChkBxValue.Value = String.Empty Then
'How do you figure out the original value?
hidChkBxValue.Value = "false"
End If
chkbxEmailPhone.Checked = CBool(hidChkBxValue.Value)
End Sub
只要ASP.net没有更改您的ID,您的JavaScript函数就可以了。
答案 1 :(得分:0)
NoAlias - 我使用了您建议的更改,因此我的代码如下所示。
首次单击复选框时,这非常有效,从未选中到选中。之后,当我尝试取消选中该框时,chkbxEmailPhone.Checked的值变为False,但隐藏字段通过回发保持为真,而在pre_render中,复选框将切换回chkbxEmailPhone.Checked = True。
我相信问题出在我的javascript上,因为无论如何,在第一篇文章后,隐藏字段仍为真。 Javascript不是我的强项,所以我不确定修复。
ASPX:
<asp:CheckBox ID="chkbxEmailPhone" runat="server" Text="Include Telephone & E-Mail" AutoPostBack="true" CssClass="bold tdfont10" Value=""></asp:CheckBox>
<asp:HiddenField ID="hidChkBxValue" runat="server" Value="" />
使用Javascript:
function fnDisableChkBox(){
if(document.getElementById("chkbxEmailPhone").checked == true){
document.getElementById("hidChkBxValue").value = "true";
}
else{
document.getElementById("hidChkBxValue").value = "false";
}
document.getElementById("chkbxEmailPhone").disabled = true;
}
VB.Net - Pre_Render
chkbxEmailPhone.Attributes.Add("onChange", "return buttonClick(this);")
If hidChkBxValue.Value = String.Empty Then
hidChkBxValue.Value = "false"
End If
chkbxEmailPhone.Checked = CBool(hidChkBxValue.Value)