Javascript VB.NET-执行回发时禁用复选框

Javascript VB.NET-执行回发时禁用复选框,javascript,asp.net,vb.net,checkbox,postback,Javascript,Asp.net,Vb.net,Checkbox,Postback,我有一个带有自动回邮功能的复选框。此复选框将隐藏/显示我的datagrid中的列。我希望在回发时禁用/只读复选框,以避免双击或服务器错误。我理解禁用复选框不会通过回发保留该值。根据我在其他类似问题中读到的内容,我需要创建一个隐藏输入,并将复选框的值指定给它。现在,隐藏的输入在回发后总是有一个false值。如有任何建议/帮助,将不胜感激 *仅显示相关代码 ASPX: VB.NET:在页面中\u预渲染 'Declared normally - not in prerender Public hidP

我有一个带有自动回邮功能的复选框。此复选框将隐藏/显示我的datagrid中的列。我希望在回发时禁用/只读复选框,以避免双击或服务器错误。我理解禁用复选框不会通过回发保留该值。根据我在其他类似问题中读到的内容,我需要创建一个隐藏输入,并将复选框的值指定给它。现在,隐藏的输入在回发后总是有一个false值。如有任何建议/帮助,将不胜感激

*仅显示相关代码

ASPX:

VB.NET:在页面中\u预渲染

'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
尝试使用控件,因为在回发时很容易获取其值

<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="" />

只要ASP.net没有更改您的ID,您的JavaScript函数应该是正常的。

NoAlias-我使用了您建议的更改,因此我的代码如下所示

这在我第一次单击复选框时非常有效,从未选中到选中。之后,当我尝试取消选中该复选框时,chkbxEmailPhone.Checked的值变为False,但hiddenfield在回发过程中保持为true,并且在pre_render中,该复选框切换回chkbxEmailPhone.Checked=true

我相信问题出在我的javascript上,因为在第一次发回帖子后,hiddenfield仍然是真的,不管发生什么。Javascript不是我的强项,因此我不确定是否有解决方案

ASPX:

VB.Net-预渲染

chkbxEmailPhone.Attributes.Add("onChange", "return buttonClick(this);")

If hidChkBxValue.Value = String.Empty Then
    hidChkBxValue.Value = "false"
End If
chkbxEmailPhone.Checked = CBool(hidChkBxValue.Value)

我应该注意的是,如果不禁用复选框,页面的工作方式与它应该的工作方式完全相同。我看不出这个答案在回发期间在哪里禁用了复选框。不需要在那里更改代码。最坏的情况是只获取HiddenField的ClientID。这种方式在回发后保留隐藏值,但复选框不保持选中状态。Darren S-My original javascript禁用复选框,同时为隐藏字段指定一个值。代码的这一部分很好用。现在我觉得自己很笨。刚刚记住的Javascripts比较运算符是==,而不是=。这种变化很有魅力。修改了上面的代码,以防其他人需要工作示例。谢谢你,诺利亚斯。
<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="" />
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: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="" /> 
function fnDisableChkBox(){

    if(document.getElementById("chkbxEmailPhone").checked == true){
        document.getElementById("hidChkBxValue").value = "true";
        }
    else{
        document.getElementById("hidChkBxValue").value = "false";
        }

   document.getElementById("chkbxEmailPhone").disabled = true;
    }
chkbxEmailPhone.Attributes.Add("onChange", "return buttonClick(this);")

If hidChkBxValue.Value = String.Empty Then
    hidChkBxValue.Value = "false"
End If
chkbxEmailPhone.Checked = CBool(hidChkBxValue.Value)