Функция JS работает на одном сайте, но не на другом

Я работаю над старым проектом aspx с Code Behind в VB, с UserControl, который используется на двух сайтах.aspx.

Внутри этого элемента управления в Code Behind находится функция с именем RegisterScript, которая создает функцию JS и, как вы уже догадались, регистрирует это. Затем эта функция вызывается при нажатии переключателей во всплывающем окне. Код приведен ниже.

Моя проблема в том, что на одном сайте функция работает правильно, кнопка нажимается, а текстовые поля отображаются / не отображаются. На другом сайте нажатие переключателей ничего не делает, и в консоли браузера отображается 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 & "');")

Регистрация и определение UserControl на сайте ASPX, где он работает:

<%@ 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 ответ

Решение

Я нашел ответ.

Сгенерированный JavaScript был заключен в оператор If Else для IsPostBack. Поскольку один из вызывающих абонентов представлял собой кнопку с изображением, а другой - обычную кнопку, один вызывал обратную передачу, а другой - нет, что приводило к тому, что функция не была определена и зарегистрирована на одном из сайтов. Изменен тип кнопки, и она работает как брелок.

Другие вопросы по тегам