【问题标题】:VB.NET - Checkbox disabled while doing postbackVB.NET - 回发时禁用复选框
【发布时间】:2015-12-07 21:51:26
【问题描述】:

我有一个带有自动回发功能的复选框。此复选框将隐藏/显示我的数据网格中的列。我希望我的复选框在回发发生时禁用/只读,以避免双击或服务器错误。我了解禁用该复选框不会通过回发保留该值。根据我在其他类似问题中所读到的内容,我需要创建一个隐藏输入并为其分配复选框的值。我现在如何拥有它,隐藏输入在回发后始终具有 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

【问题讨论】:

  • 我应该注意,如果不禁用该复选框,页面将完全按照应有的方式工作。

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


【解决方案1】:

尝试使用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 函数就应该没问题。

【讨论】:

  • 我看不到这个答案在回发期间禁用复选框的位置。
  • 那里不需要更改代码。最坏的情况是获取 HiddenField 的 ClientID。
  • 这种方式在回发后保留隐藏值,但复选框不会保持选中状态。
  • Darren S - 我原来的 javascript 禁用了复选框,同时为隐藏字段分配了一个值。这部分代码运行良好。
【解决方案2】:

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)

【讨论】:

  • 现在我觉得自己很笨。刚刚记得 Javascript 的比较运算符是 ==,而不是 =。这种变化就像一个魅力。修改了上面的代码,以防其他人需要一个工作示例。谢谢 NoAlias。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多