0

Как вызвать JavaScript-функцию из код-бихайнда

18

Описание проблемы:

У меня есть страница ASP.NET, на которой я использую JavaScript. Я написал функцию на JavaScript, которая должна изменять значение текстового поля. Вот что у меня есть:

Код страницы ASP.NET:

<HTML> <HEAD>
     <script type="text/javascript">
      function Myfunction(){
          document.getElementById('MyText').value = "hi";
      }
      </script>
</HEAD> <BODY>
<input type="text" id="MyText" runat="server" /> </BODY>

Код в Code-behind:

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
  Handles Me.Load
       If Session("My") = "Hi" Then
          ' Здесь я хочу вызвать функцию JavaScript "Myfunction"
       End If 
 End Sub

Вопрос: Как я могу вызвать функцию JavaScript "Myfunction" из кода на VB.NET в блоке Page_Load, когда условие выполняется? Либо, если есть более правильный способ выполнить данное действие, пожалуйста, дайте рекомендацию. Благодарю!

5 ответ(ов)

0

Один из способов сделать это — использовать ClientScriptManager. Вот пример кода:

Page.ClientScript.RegisterStartupScript(
    GetType(), 
    "MyKey", 
    "Myfunction();", 
    true);

В этом коде происходит регистрация скрипта, который будет выполнен при загрузке страницы. Убедитесь, что Myfunction() — это функция, которая определена на вашей странице или в подключенном скрипте.

0

Это способ вызвать один или несколько методов JavaScript из кода на стороне сервера. С помощью ScriptManager мы можем вызывать методы последовательно. Рассмотрим приведенный ниже код в качестве примера.

ScriptManager.RegisterStartupScript(this, typeof(Page), "UpdateMsg", 
    "$(document).ready(function(){EnableControls();
    alert('Overrides successfully Updated.');
    DisableControls();});", 
true);

В этом коде сначала вызывается метод EnableControls(). Затем появляется всплывающее окно с сообщением. После этого вызывается метод DisableControls().

0

Есть очень простой способ сделать это. Он заключается в том, чтобы внедрить JavaScript код в элемент управления Label из кода на серверной части. Вот пример кода:

<head runat="server"> 
    <title>Пример вызова функции JavaScript из кода на сервере</title> 
    <script type="text/javascript"> 
        function showDialogue() { 
            alert("это диалоговое окно было вызвано через код на сервере."); 
        } 
    </script> 
</head>

........

lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";

Полный код можно найти здесь: http://softmate-technologies.com/javascript-from-CodeBehind.htm (ссылка неактивна)

Ссылка из Internet Archive: https://web.archive.org/web/20120608053720/http://softmate-technologies.com/javascript-from-CodeBehind.htm

0

Если порядок выполнения не имеет значения, и вам нужно, чтобы выполнялись как JavaScript, так и код на сервере для элемента ASP, вот что можно сделать.

Что вы можете вынести из моего примера: у меня есть div, который перекрывает элемент управления ASP, и я хочу, чтобы выполнялись как JavaScript, так и код на сервере. Таким образом, метод onClick для div и событие OnSelectionChanged для календаря будут срабатывать.

В этом примере я использую элемент управления ASP Calendar и управляю им как с помощью JavaScript, так и с помощью кода на сервере:

Код на фронте:

<div onclick="showHideModal();">
    <asp:Calendar 
        OnSelectionChanged="DatepickerDateChange" ID="DatepickerCalendar" runat="server" 
        BorderWidth="1px" DayNameFormat="Shortest" Font-Names="Verdana" 
        Font-Size="8pt" ShowGridLines="true" BackColor="#B8C9E1" BorderColor="#003E51" Width="100%"> 
        <OtherMonthDayStyle ForeColor="#6C5D34"> </OtherMonthDayStyle> 
        <DayHeaderStyle  ForeColor="black" BackColor="#D19000"> </DayHeaderStyle>
        <TitleStyle BackColor="#B8C9E1" ForeColor="Black"> </TitleStyle> 
        <DayStyle BackColor="White"> </DayStyle> 
        <SelectedDayStyle BackColor="#003E51" Font-Bold="True"> </SelectedDayStyle> 
    </asp:Calendar>
</div>

Код на сервере:

protected void DatepickerDateChange(object sender, EventArgs e)
{
    if (toFromPicked.Value == "MainContent_fromDate")
    {
        fromDate.Text = DatepickerCalendar.SelectedDate.ToShortDateString();
    }
    else
    {
        toDate.Text = DatepickerCalendar.SelectedDate.ToShortDateString();
    }
}

Таким образом, при клике на div будет выполняться функция JavaScript showHideModal() и также будет срабатывать событие OnSelectionChanged элемента Calendar, позволяя интегрировать оба подхода без проблем.

0

Чтобы запустить JavaScript метод в ASP.NET, добавьте следующую строку в конец страницы перед тегом </form>, как минимум под тем js методом, который вы написали.

Причина этого заключается в том, чтобы избежать вызова вашего метода до того, как браузер поймет, что это за функция, и в конечном итоге не сделает ничего.

<% Response.Write($"<script>yourfunction('{Config.id}');</script>"); %>

ps: Я пробовал все методы, которые описаны выше, но ничего не сработало. И я сам нашел этот простой и удивительный способ вызова js метода!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь