Quelqu'un peut-il fournir de bons exemples d'appel d'une fonction JavaScript à partir de Code Behind et vice-versa?
Vous pouvez essayer ceci:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
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.
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);
Si vous devez envoyer une valeur en tant que paramètre.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
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.
WebMethod
as attribute
dans les méthodes cible. ScriptManager
setting EnablePageMethods
as true
.PageMethods
.Comme ça:
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
}
ScriptManager
sur la Page
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
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);
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.
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();
Vous pouvez utiliser littéralement:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
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
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: -
CodeBehind="History.aspx.cs"
pointe vers une mauvaise pageScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
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
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
utiliser votre fonction suffit
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>";
ça marche pour moi
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
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.
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.
Essayez ceci dans Code Behind et cela fonctionnera à 100%
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
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.
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;"