web-dev-qa-db-fra.com

Appel de la fonction JavaScript à partir de code derrière

Quelqu'un peut-il fournir de bons exemples d'appel d'une fonction JavaScript à partir de Code Behind et vice-versa?

131
ssmsnet

Vous pouvez essayer ceci:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
180
mutanic

C # to JavaScript: vous pouvez enregistrer un bloc de script pour qu'il s'exécute sur la page, comme suit:

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

remplacez la partie alert() par votre nom de fonction.

Pour appeler la méthode C # à partir de JavaScript, vous pouvez utiliser ScriptManager ou jQuery. J'utilise personnellement jQuery. Vous devez décorer la méthode que vous souhaitez appeler à partir de JavaScript avec l'attribut WebMethod. Pour plus d'informations sur l'appel de la méthode C # (appelée PageMethod) à partir de jQuery, vous pouvez vous référer à Dave Ward's post.

47
TheVillageIdiot

Appeler une fonction JavaScript depuis le code derrière

Étape 1 Ajoutez votre code Javascript

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

Étape 2 Ajoutez 1 Script Manager dans votre formulaire Web et ajoutez le bouton 1too

Étape 3 Ajoutez ce code à votre événement de clic de bouton 

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
44
Orlando Herrera

Si vous devez envoyer une valeur en tant que paramètre.

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
12
Liko

Vous ne pouvez pas le faire directement. Dans WebForms standard, JavaScript est interprété par le navigateur et C # par le serveur. Ce que vous pouvez faire pour appeler une méthode depuis un serveur à l'aide de JavaScript, c'est.

Comme ça:

Étape 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 
    }

Étape 2: Ajouter une ScriptManager sur la Page

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

Étape 3: Appel de la méthode à l'aide de JavaScript

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

Jetez un coup d'oeil à ce lien.

Pour appeler une fonction JavaScript du serveur, vous pouvez utiliser RegisterStartupScript :

ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
11
Vismari

Vous ne pouvez pas. Codebehind est en cours d'exécution sur le serveur alors que JavaScript est en cours d'exécution sur le client.

Cependant, vous pouvez ajouter <script type="text/javascript">someFunction();</script> à votre sortie et ainsi faire en sorte que la fonction JS soit appelée lorsque le navigateur analyse votre marquage.

7
ThiefMaster

Une autre chose à faire est de créer une variable de session qui est définie dans le code derrière, puis de vérifier l’état de cette variable, puis d’exécuter votre javascript. La bonne chose est que cela vous permettra d'exécuter votre script là où vous le souhaitez au lieu de devoir déterminer s'il doit être exécuté dans le DOM ou globalement. 

Quelque chose comme ceci: Code behind:

Session["newuser"] = "false" 

En javascript

var newuser = '<%=Session["newuser"]%>';
 if (newuser == "yes")
     startTutorial();  
6
user1281573

Vous pouvez utiliser littéralement:

this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
6
Dilip Kumar Yadav

IIRC Code Behind est compilé côté serveur et javascript est interprété côté client. Cela signifie qu'il n'y a pas de lien direct entre les deux.

Par contre, vous pouvez faire en sorte que le client et le serveur communiquent via un outil astucieux appelé AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

5
Berry Ligtermoet

Exemple de travail: _

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

Code derrière

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);
        }

    }
}

Pièges possibles: - 

  1. Code et HTML peuvent ne pas être dans le même espace de noms
  2. CodeBehind="History.aspx.cs" pointe vers une mauvaise page
  3. La fonction JS a une erreur
4
Hitesh Sahu
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
4
Apps Tawale

J'ai remarqué que beaucoup de réponses ici utilisent ScriptManager.RegisterStartupScript et si vous voulez le faire, ce n'est pas la bonne façon de le faire. La bonne façon consiste à utiliser ScriptManager.RegisterScriptBlock([my list of args here]). La raison en est que vous ne devriez utiliser que RegisterStartupScript lors du chargement de votre page (d'où le nom RegisterStartupScript).

En VB.NET:

ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)

en C #: 

ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);

Bien sûr, j'espère que cela va sans dire que vous devez remplacer key par votre identifiant de clé et que vous devriez probablement déplacer tout cela dans un sous/fonction/méthode et passer key et someJavascriptObject (si votre méthode javascript requiert que votre argument soit un objet javascript).

Documents MSDN:

https://msdn.Microsoft.com/en-us/library/bb338357(v=vs.110).aspx

2
cloudstrifebro
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);

utiliser votre fonction suffit

1
sadist king

Voici comment je l'ai fait.

Le balisage HTML montrant un libellé et un contrôle de bouton est le suivant.

<body> 
  <form id="form1" runat="server"> 
  <div> 
    <asp:Label ID="lblJavaScript" runat="server" Text=""></asp:Label> 
    <asp:Button ID="btnShowDialogue" runat="server" Text="Show Dialogue" /> 
  </div> 
  </form> 
</body>

La fonction JavaScript est ici.

<head runat="server"> 
  <title>Calling javascript function from code behind example</title> 
  <script type="text/javascript"> 
    function showDialogue() { 
      alert("this dialogue has been invoked through codebehind."); 
    } 
  </script> 
</head>

Le code derrière pour déclencher la fonction JavaScript est ici.

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

ça marche pour moi 

object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
1
Kirk Patrick Brown

Vous pouvez exposer les méthodes C # sur des pages de code à des appels via JavaScript en utilisant l'attribut ScriptMethod .

Vous ne pouvez pas appeler JavaScript à partir d'un CodeBehind - ce code existe uniquement sur le client.

1
Josh Kodroff

J'ai utilisé ScriptManager dans Code Behind et cela a bien fonctionné.

ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);

Si vous utilisez UpdatePanel dans ASP Frontend ..__, entrez le nom UpdatePanel et le 'nom de la fonction' définis avec les balises de script.

0
Ravi Agrawal

Essayez ceci dans Code Behind et cela fonctionnera à 100%

string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
0
Chandan Kumar

Vous ne pouvez pas appeler une fonction Javascript à partir de CodeBehind, car le fichier CodeBehind contient le code qui exécute le côté serveur sur le serveur Web. Le code Javascript s'exécute dans le navigateur Web côté client.

0
Charlie Kilian

Comme je ne pouvais pas trouver de solution code-back, qui inclut d'essayer les ClientScript et ScriptManager comme mutanic et Orlando Herrera dans cette question (ils ont tous deux échoué), je vais proposer une solution frontale qui utilise des clics d'autres s'ils sont dans la même position que moi. Cela a fonctionné pour moi:

Balise HTML:

<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>

JavaScript:

function myFunction() {
    // Your JavaScript code
    return false;
}

J'utilise simplement un bouton ASP.NET qui utilise la propriété OnClientClick, qui active les fonctions de script côté client, à savoir JavaScript. Les éléments clés à noter ici sont les utilisations du mot clé return dans l'appel de fonction et dans la fonction elle-même. J'ai lu des documents qui n'utilisent pas return mais obtiennent toujours le clic du bouton pour fonctionner - d'une manière ou d'une autre, cela n'a pas fonctionné pour moi. L'instruction return false; dans la fonction spécifie qu'une publication ne doit PAS se produire. Vous pouvez également utiliser cette instruction dans la propriété OnClientClick: OnClientClick="myFunction() return false;"

0
Max Voisard