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

时间:2019-02-20 08:14:05

标签: javascript asp.net aspx-user-control

我正在使用VB中的Code Behind处理一个旧的aspx项目,并使用了在两个.aspx网站上使用的UserControl。

在“代码隐藏”中的“控件”内部是一个称为RegisterScript的函数,该函数创建一个JS函数,并且您猜对了,然后对其进行注册。单击弹出窗口中的单选按钮时,将调用此函数,代码如下。

我的问题是在一个站点上该功能正常运行,单击了按钮,并且显示/不显示文本框。在另一个站点上,单击单选按钮不起作用,并且浏览器控制台显示JS函数SetSearchField未定义。

在两个.aspx文件中,UserControl的定义完全相同,顶部注册,底部定义。在这方面没有任何区别。我不知道这是什么错误。

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" %>

我一直在进行彻底搜索,但没有找到适合我在一个站点上工作但在另一个站点上工作的案例的任何信息。

1 个答案:

答案 0 :(得分:0)

我找到了答案。

生成的JavaScript包含在IsPostBack的If Else语句中。由于一个呼叫者是一个图像按钮,而另一个呼叫者是一个普通按钮,因此一个导致回发,而另一个则没有,导致功能未在其中一个站点上定义和注册。更改了按钮的类型,它就像一个超级按钮。