172 votes

Appeler une fonction JavaScript depuis CodeBehind

Quelqu'un peut-il fournir de bons exemples d'appel d'une fonction JavaScript depuis CodeBehind et vice-versa ?

235voto

mutanic Points 613

Vous pouvez essayer ceci :

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

43 votes

Je choisirais l'approche ScriptManager.RegisterStartupScript(Page, typeof(Page), "somekey", script, true) ;. Elle fonctionne également pendant les postbacks partiels.

10 votes

1. Parfois Page.ClientScript.RegisterClientScriptBlock est requis à la place voir cet article pour plus d'informations . 2. Il peut être utile de mentionner que pour que MyFunction() fonctionne, MyFunction() doit être définie avant les balises du formulaire ou à l'intérieur de celles-ci, mais PAS après la balise de fin </form> (sinon une erreur d'objet attendu se produira).

3 votes

ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true); travaux. this.GetType() jette une erreur pour moi.

60voto

Orlando Herrera Points 456

Appeler une fonction JavaScript à partir du code derrière

Étape 1 Ajouter votre code Javascript

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

Étape 2 Ajouter 1 script Manager dans votre webForm et ajoutez 1 bouton trop

Étape 3 Ajoutez ce code dans l'événement de clic de votre bouton

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

1 votes

Lorsque l'on essaie de faire cela lorsqu'on clique sur une ligne de GridView, cela ne fonctionne que si l'on utilise la fonction ScriptManager comme dans cette réponse, pas Page.ClientScript comme dans les autres réponses. Cela pourrait être lié à la asp:UpdatePanel commentaire sous la réponse acceptée.

59voto

TheVillageIdiot Points 22158

C# vers JavaScript : vous pouvez enregistrer le bloc script à exécuter sur la page comme suit :

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

remplacer alert() avec le nom de votre fonction.

Pour appeler une 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 à l'aide des éléments suivants WebMethod attribut. Pour plus d'informations sur l'appel d'une méthode C# (appelée PageMethod ) de jQuery vous pouvez vous référer à Dave Ward's poste.

17voto

Vismari Points 441

Vous ne pouvez pas le faire directement. Dans les WebForms standard, JavaScript est interprété par le navigateur et C# par le serveur. Ce que vous pouvez faire pour appeler une méthode du serveur en utilisant JavaScript 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 : Ajout d'un ScriptManager sur le 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'œil à ce lien.

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

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

0 votes

Où placer l'étape 1 dans la hiérarchie des fichiers de MVC 3 ?

0 votes

@Rob Le GetProducts() est juste une fonction de code-behind qui se trouve dans un contrôleur dans une application MVC, donc les balises vont au-dessus de n'importe quelle fonction que vous voulez mettre dans un contrôleur et que vous avez l'intention d'appeler depuis JavaScript.

8voto

ThiefMaster Points 135805

Vous ne pouvez pas. Codebehind est exécuté sur le serveur tandis que JavaScript est exécuté 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 balisage.

72 votes

"Vous ne pouvez pas. Mais voici comment vous allez faire."

3 votes

Je ne considérerais pas qu'il s'agit d'appeler une méthode à partir du code côté serveur, car il n'y a pas de véritable moyen d'obtenir une valeur de retour ou de spécifier une fonction de rappel.

8 votes

Oh, bien sûr que tu peux. Tu peux appeler un postback depuis ton javascript ou AJAX. J'ai trouvé ça drôle ; j'ai tendance à faire la même chose - "Non, c'est impossible. Personne ne voudrait même faire ça s'il le pouvait", puis quelques minutes plus tard "Alors voici comment nous allons le faire".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X