VB.NET - 在回发时禁用复选框

时间:2015-12-07 21:51:26

标签: javascript asp.net vb.net checkbox postback

我有一个带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

2 个答案:

答案 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)