VB.NET - 执行回发时复选框被禁用
VB.NET - Checkbox disabled while doing postback
我有一个自动post返回的复选框。此复选框将 hide/show 我的数据网格中的一列。我希望我的复选框 disabled/read 仅在出现 post 返回时出现,以避免双击或服务器错误。我知道禁用复选框将不会通过 post 保留值。根据我在其他类似问题中读到的内容,我需要创建一个隐藏的输入并为其分配我的复选框的值。我现在如何拥有它,隐藏输入在 postback 之后始终具有 false 值。任何 advice/help 将不胜感激。
*只显示相关代码。
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 Event Handler 就变成了下面这样。您不需要第三个隐藏值 "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,但隐藏字段通过 post 返回保持为真,并且在 pre_render 中复选框切换回 chkbxEmailPhone.Checked = 正确。
我认为问题出在我的 javascript 上,因为隐藏字段在第一个 post 返回后仍然为真,无论如何。 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)
我有一个自动post返回的复选框。此复选框将 hide/show 我的数据网格中的一列。我希望我的复选框 disabled/read 仅在出现 post 返回时出现,以避免双击或服务器错误。我知道禁用复选框将不会通过 post 保留值。根据我在其他类似问题中读到的内容,我需要创建一个隐藏的输入并为其分配我的复选框的值。我现在如何拥有它,隐藏输入在 postback 之后始终具有 false 值。任何 advice/help 将不胜感激。
*只显示相关代码。
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 Event Handler 就变成了下面这样。您不需要第三个隐藏值 "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,但隐藏字段通过 post 返回保持为真,并且在 pre_render 中复选框切换回 chkbxEmailPhone.Checked = 正确。
我认为问题出在我的 javascript 上,因为隐藏字段在第一个 post 返回后仍然为真,无论如何。 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)