Вызов функции JavaScript из CodeBehind - PullRequest
138 голосов
/ 20 апреля 2011

Может ли кто-нибудь привести хорошие примеры вызова функции JavaScript из CodeBehind и наоборот?

Ответы [ 20 ]

186 голосов
/ 30 октября 2012

Вы можете попробовать это:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
50 голосов
/ 20 апреля 2011

C # для JavaScript: вы можете зарегистрировать блок скрипта для запуска на странице следующим образом:

ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);

замените alert() деталь названием вашей функции.

Для вызова метода C # из JavaScript вы можете использовать ScriptManager или jQuery. Я лично использую jQuery. Вам нужно украсить метод, который вы хотите вызвать из JavaScript, с атрибутом WebMethod. Для получения дополнительной информации о вызове метода C # (называемого PageMethod) из jQuery вы можете обратиться к сообщению Дэйва Уорда .

47 голосов
/ 20 марта 2014

Вызов функции JavaScript из кода

Шаг 1 Добавьте код Javascript

<script type="text/javascript" language="javascript">
    function Func() {
        alert("hello!")
    }
</script>

Шаг 2 Добавьте 1 Диспетчер сценариев вВаша веб-форма и кнопка Добавить 1 тоже

Шаг 3 Добавьте этот код в событие нажатия кнопки

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
15 голосов
/ 20 апреля 2011

Вы не можете сделать это напрямую.В стандартных веб-формах JavaScript интерпретируется браузером, а C # - сервером.Чтобы вызвать метод с сервера с помощью JavaScript, вы можете:

  • Использовать WebMethod как attribute в целевых методах.
  • Добавить ScriptManager значение EnablePageMethods как true.
  • Добавить код JavaScript для вызова методов через объект PageMethods.

Пример:

Шаг 1

public partial class Products : System.Web.UI.Page 
{ 
    [System.Web.Services.WebMethod()] 
    [System.Web.Script.Services.ScriptMethod()] 
    public static List<Product> GetProducts(int cateogryID) 
    {
        // Put your logic here to get the Product list 
    }

Шаг 2: Добавление ScriptManager в Page

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

Шаг 3. Вызов метода с использованием JavaScript

function GetProductsByCategoryID(categoryID)
{
    PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}

Просмотрите эту ссылку.

Для вызова функции JavaScript с сервера вы можете использовать RegisterStartupScript:

ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
13 голосов
/ 30 октября 2014

Если вам нужно отправить значение в качестве параметра.

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
7 голосов
/ 21 июля 2014

Другая вещь, которую вы можете сделать, - создать переменную сеанса, которая будет установлена ​​в коде, затем проверить состояние этой переменной и затем запустить ваш javascript.Хорошо, что это позволит вам запускать сценарий именно там, где вы хотите, вместо того, чтобы выяснять, хотите ли вы, чтобы он выполнялся в DOM или глобально.

Примерно так: Код позади:

Session["newuser"] = "false" 

В javascript

var newuser = '<%=Session["newuser"]%>';
 if (newuser == "yes")
     startTutorial();  
7 голосов
/ 20 апреля 2011

Вы не можете. Codebehind работает на сервере, в то время как JavaScript работает на клиенте.

Однако вы можете добавить <script type="text/javascript">someFunction();</script> к своему выводу и, таким образом, вызвать функцию JS, когда браузер анализирует вашу разметку.

6 голосов
/ 28 марта 2016

Вы можете использовать литерал:

this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
5 голосов
/ 20 апреля 2011

IIRC Code Behind компилируется на стороне сервера, а javascript интерпретируется на стороне клиента.Это означает, что между ними нет прямой связи.

С другой стороны, вы можете сделать так, чтобы клиент и сервер общались через изящный инструмент под названием AJAX.http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

4 голосов
/ 01 декабря 2016

Рабочий пример: _

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage2.Master" AutoEventWireup="true" CodeBehind="History.aspx.cs" Inherits="NAMESPACE_Web.History1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>


 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 

        <script type="text/javascript">

            function helloFromCodeBehind() {
                alert("hello!")
            }


        </script>

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

 <div id="container"  ></div>

</asp:Content>

Код позади

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NAMESPACE_Web
{
    public partial class History1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "helloFromCodeBehind()", true);
        }

    }
}

Возможные подводные камни: -

  1. Код и HTML могут не находиться в одном и том же пространстве имен
  2. CodeBehind="History.aspx.cs" указывает на неправильную страницу
  3. Функция JS имеет ошибку
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...