如何在PostBack上动态禁用TextBox

时间:2011-03-25 21:45:18

标签: javascript asp.net postback radio-button

确定。这是背景。

我有一个应该接受支票的应用程序。用户有2个单选按钮。第一个单选按钮有一个与之关联的下拉列表,其中包含以前使用过的支票帐户的屏蔽号码。

第二个单选按钮有三个文本框和一个与之关联的支票图像。

当用户点击此页面时,将禁用三个文本框和与第二个单选按钮关联的检查图像。然后,如果用户决定他/她想要使用新的支票账户,他们可以点击第二个单选按钮并激活启用三个复选框的Javascript以及与该第二个单选按钮相关联的支票的图像。如果他们点击第一个单选按钮,它将重新禁用文本框并隐藏与第二个单选按钮关联的检查图像。

当我进行服务器端验证时会出现问题。在验证所有文本字段后,如果出现问题,我就会脱离代码的底部,页面会回发,并且违规文本字段上方的标签会显示错误消息。

一个警告:应该在第一个单选按钮的OnClick事件上触发的Javascript以及第二个单选按钮的文本字段被禁用。用户可以单击第二个单选按钮,这些字段将启用,但这非常笨重。

这是我注入Javascript的启用代码:

Private Sub JavascriptInject()
        Dim sEnableControls As String
        Dim sDisableControls As String

        'write out the enable controls script
        sEnableControls = "<script type=""text/javascript"">function EnableControls(){ "
        sEnableControls = sEnableControls & "document.getElementById('txtRoutingNumMult').disabled=false;"
        sEnableControls = sEnableControls & "document.getElementById('txtECheckNumMult').disabled=false;"
        sEnableControls = sEnableControls & "document.getElementById('txtECHeckNameMult').disabled=false;"
        sEnableControls = sEnableControls & "document.getElementById('imgCheckMult').style.display='';"
        sEnableControls = sEnableControls & " }</script>"

        'write out the disable controls script
        sDisableControls = "<script type=""text/javascript"">function DisableControls(){ "
        sDisableControls = sDisableControls & "document.getElementById('txtRoutingNumMult').disabled=true;"
        sDisableControls = sDisableControls & "document.getElementById('txtECheckNumMult').disabled=true;"
        sDisableControls = sDisableControls & "document.getElementById('txtECHeckNameMult').disabled=true;"
        sDisableControls = sDisableControls & "document.getElementById('imgCheckMult').style.display='none';"
        sDisableControls = sDisableControls & " }</script>"

        'inject it
        ClientScript.RegisterStartupScript(Me.GetType, "EnableControls", sEnableControls)
        ClientScript.RegisterStartupScript(Me.GetType, "DisableControls", sDisableControls)

        rbECheckNew.Attributes.Add("OnClick", "EnableControls()")
        rbECheckPrev.Attributes.Add("OnClick", "DisableControls()")

    End Sub

如何在失败的验证回发中重新启用文本框?

1 个答案:

答案 0 :(得分:1)

您可以在失败的验证回发时调用以下函数:

ClientScript.RegisterStartupScript(Me.GetType,“EnableControlsStartup”,“EnableControls()”,true)

参考链接:

http://msdn.microsoft.com/en-us/library/system.web.ui.page.registerstartupscript.aspx