簡體   English   中英

VB.NET-執行回發時禁用了復選框

[英]VB.NET - Checkbox disabled while doing postback

我有一個帶有自動回發的復選框。 此復選框將隱藏/顯示我的數據網格中的一列。 我希望我的復選框在發回郵件時被禁用/只讀,以避免雙擊或服務器錯誤。 我知道禁用該復選框將不會通過回發保存該值。 根據我在其他類似問題中所讀的內容,我需要創建一個隱藏的輸入並為其分配復選框的值。 現在,隱藏的輸入在回發后始終具有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

嘗試使用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函數就應該可以使用。

NoAlias-我使用了您建議的更改,因此我的代碼如下所示。

第一次單擊復選框(從未選中到選中)時,這種方法效果很好。 之后,當我嘗試取消選中該框時,chkbxEmailPhone.Checked的值將變為False,但在發回郵件時,hiddenfield仍為true,在pre_render中,此復選框將切換回chkbxEmailPhone.Checked = True。

我相信問題出在我的javascript上,因為無論如何,hiddenfield在第一次發回帖子后仍然是正確的。 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-預渲染

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM