[英]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.