JS 函数在一个站点上工作,但在另一个站点上不工作

JS Function working on one site, but not on another

我正在开发一个旧的 aspx 项目,代码隐藏在 VB 中,其中有一个在两个 .aspx 站点上使用的 UserControl。

在该控件内部,在代码隐藏中,有一个名为 RegisterScript 的函数,它创建一个 JS 函数,您猜对了,它会注册它。单击弹出窗口中的单选按钮时会调用此函数,代码如下。

我的问题是在一个网站上该功能正常工作,按钮被点击但文本框 show/don 不显示。在另一个站点上,单击单选按钮没有任何反应,浏览器控制台显示 SetSearchField,JS 函数未定义。

UserControl 在两个.aspx 文件中的定义方式完全相同,在顶部注册,在底部定义。从字面上看,这方面没有区别。不知道哪里出错了

创建函数的 Sub RegisterScript:

Private Sub RegisterScript()

    Dim csm As ClientScriptManager = Page.ClientScript
    Dim cstype = Me.GetType()
    Dim csname = "SetSearchField"

    If Not csm.IsClientScriptBlockRegistered(cstype, csname) Then
        Dim script As String = ""
        script &= "<script type='text/javascript'>"
        script &= "function SetSearchField(selTextBoxId) {"
        script &= "var itTextbox;"
        script &= "itTextbox = document.getElementById('" & Me.Panel_Amount.ClientID & "');"
        script &= "itTextbox.style.display = 'none';"
        script &= "itTextbox = document.getElementById('" & Me.TextBox_SearchStringBelegNr.ClientID & "');"
        script &= "itTextbox.style.display = 'none';"
        script &= "itTextbox = document.getElementById('" & Me.TextBox_SearchStringFirm.ClientID & "');"
        script &= "itTextbox.style.display = 'none';"
        script &= "itTextbox = document.getElementById('" & Me.TextBox_SearchStringOtherAccount.ClientID & "');"
        script &= "itTextbox.style.display = 'none';"
        script &= "itTextbox = document.getElementById('" & Me.TextBox_SearchStringUsage.ClientID & "');"
        script &= "itTextbox.style.display = 'none';"
        script &= "var selElem = document.getElementById(selTextBoxId);"
        script &= "selElem.style.display = 'block';"
        script &= "selElem.focus();"

        'script &= "if (selTextBoxId=='" & Me.TextBox_SearchStringAmountFrom.ClientID & "') {"
        'script &= "document.getElementById('" & Me.TextBox_SearchStringAmountTo.ClientID & "').style.display = 'block';"
        'script &= "}"

        script &= "}"
        script &= "</script>"
        csm.RegisterClientScriptBlock(cstype, csname, script, False)
    End If

End Sub

Page_Load,其中 RegisterScript 被调用并添加到 RadioButtons:

    If Not Me.IsPostBack Then

        Me.RegisterScript()
        Me.RadioButton_Amount.Attributes.Add("onClick", "javascript:SetSearchField('" & Me.Panel_Amount.ClientID & "');")
        Me.RadioButton_BelegNr.Attributes.Add("onClick", "javascript:SetSearchField('" & Me.TextBox_SearchStringBelegNr.ClientID & "');")
        Me.RadioButton_Firm.Attributes.Add("onClick", "javascript:SetSearchField('" & Me.TextBox_SearchStringFirm.ClientID & "');")
        Me.RadioButton_OtherAccount.Attributes.Add("onClick", "javascript:SetSearchField('" & Me.TextBox_SearchStringOtherAccount.ClientID & "');")
        Me.RadioButton_Usage.Attributes.Add("onClick", "javascript:SetSearchField('" & Me.TextBox_SearchStringUsage.ClientID & "');")

在其工作的 aspx 站点上注册和定义 UserControl:

<%@ Register Src="../UserControls/UCSearch.ascx" TagName="UCSearch" TagPrefix="uc4" %>
<uc4:UCSearch ID="UCSearch_Sent" runat="server" Title="Gesendete Auftträge suchen"
    EnableSearchSuborders="true" EnableSearchBelegNr="true" EnableSearchPeriode="false" />

在不起作用的网站上注册和定义:

    <%@ Register Src="../UserControls/UCSearch.ascx" TagName="UCSearch" TagPrefix="uc3" %>

我一直在彻底搜索,但没有找到任何适合我在一个站点上工作但在另一个站点上不工作的情况。

我找到了答案。

生成的 JavaScript 包含在 IsPostBack 的 If Else 语句中。由于一个调用者是图像按钮,另一个是普通按钮,一个调用者导致回发,而另一个调用者没有,这导致该功能未在其中一个站点上定义和注册。更改了按钮类型,效果非常好。