Member 14476420 Ответов: 1

Как вызвать функцию javascript из кода позади, но не при загрузке страницы?


Я пытался понять это в течение нескольких дней.
Я прочитал много потоков, которые упоминают вызов javascript через код позади с помощью ClientScriptManager, но все они, похоже, запускают функцию javascript только при загрузке страницы или при отправке, или при нажатии кнопки.

Воспользоваться этой страницы например:
Несколько способов вызвать функцию JavaScript из отделенного кода в ASP.Net[^]


Конечно, есть способ не запускать javascript при загрузке страницы, но всякий раз, когда пользователь хочет вызвать его из функции C# или Vb? Однако мне еще предстоит найти ответ.

Проблема, по-видимому, заключается в том, что для вызова метода aspx.cs из функции C# метод aspx.cs должен быть "общим", иначе, если мы вызываем экземпляр класса из метода C#, он не работает. Но, с другой стороны, Пейдж.ClientScript требует Ссылки на объект, поэтому его невозможно заставить работать.

Эта проблема также объясняется в этой теме:
Проблема ClientScript | The ASP.NET форумы[^]

Я был бы очень благодарен, если бы кто-нибудь показал мне, как это сделать.

Что я уже пробовал:

Все предложенные ответы из других потоков, которые запускают код при загрузке страницы, - это не то, что я ищу.

Пример:

Public Class home
    Inherits Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        pageTitle.Text = "Query Builder v" & System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
        

        Dim Script As ClientScriptManager = Page.ClientScript

        If Not Script.IsClientScriptBlockRegistered(Me.[GetType](), "Alert") Then
            Script.RegisterClientScriptBlock(Me.[GetType](), "Alert", "<script type=text/javascript>alert('hi')</script>")
        End If

    End Sub

End Class

1 Ответов

Рейтинг:
9

F-ES Sitecore

Вы не можете вызвать javascript из своего кода позади. Подумайте о жизненном цикле вашего кода;

1 пользователь запрашивает url адрес
2 Ваш c# работает на сервере и генерирует поток html для возврата клиенту
3 код c# завершается, и полученный html-код, который был сгенерирован, отправляется клиенту
4 клиентский браузер интерпретирует html для визуального отображения и интерпретирует и запускает любой javascript

Когда ваш код c# запущен, нет ничего, что можно было бы интерпретировать или выполнить javascript, поскольку клиентский браузер не получил никаких выходных данных с вашей страницы. Ваш c# работает полностью на сервере, а затем javascript работает полностью на клиенте. Вы не можете заставить их работать одновременно, так как сеть просто не работает так.

Все, что делает RegisterClientScriptBlock, - это вводит js в html, ожидающий отправки в браузер, чтобы он выполнялся, когда браузер получает его, что является шагом 4, который происходит после завершения работы вашего c#.


Member 14476420

Спасибо, что разъяснили это. Очень ценю