Appelez une méthode non statique côté serveur depuis le côté client à l’aide de JavsScript

Comment appeler une méthode non statique côté serveur (aspx.cs) à partir du client en utilisant javascript (aspx) ….?

Autant que je sache, je peux appeler une méthode statique côté serveur du côté client …

du côté serveur:

[WebMethod] public static void method1() { } 

côté client:

   function keyUP() { PageMethods.method1(); }    

Ça marche. Maintenant, comment appeler une méthode non statique du côté client?

Vous pouvez éviter la contrainte statique en utilisant une simple page .asmx au lieu de la page codebehind.

1) Ouvrir un nouveau site Web en utilisant le modèle AJAX Enable ASP.NET (il met les références nécessaires dans le fichier web.config)

2) SIMPLESERVICE.ASMX – Ajouter un nouveau service Web .asmx (j’ai appelé le mien SimpleService.asmx) Notez la décoration [System.Web.Script.Services.ScriptSerive] et le fait que la classe SimpleService implémente Webservice.

 <%@ WebService Language="C#" Class="SimpleService" %> using System; using System.Web.Services; [System.Web.Script.Services.ScriptService] public class SimpleService : WebService { [WebMethod] public ssortingng GetMessage(ssortingng name) { return "Hello " + name + ", the time here is: " + DateTime.Now.ToShortTimeSsortingng(); } } 

3) DEFAULT.ASPX – Pour l’utiliser, faites référence au service dans votre gestionnaire de scripts et vous êtes opérationnel. Dans mon javascript, j’appelle class.method – SimpleService.GetMessage.

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>    Untitled Page    

Hello World Example

Enter Name: Call Server

J’ai utilisé l’exemple que j’ai trouvé de Scott Gu Found Here.

Non, vous ne pouvez pas appeler des méthodes non statiques du côté client en tant que tel. Je l’ai essayé une fois mais c’est moche (j’ai aussi utilisé jQuery ajax). Appelez simplement la page en utilisant ajax avec le nom de la méthode qui lui est ajouté en tant que paramètre de chaîne de requête, puis, côté serveur, vérifiez le paramètre et appelez la méthode correspondante. Mais comme je vous l’ai dit, c’est assez moche 🙁

 $.ajax({'/mypage.aspx?m=mymethod',......}); //this is not correct syntax 

côté serveur:

 protected void Page_Load(object sender, EventArgs e) { if(!Request.QuerySsortingng.HasKeys() || ssortingng.IsNullOrEmpty(Request.QuerySsortingng["m"])) { //return error or something relevant to your code } var m = Request.QuerySsortingng["m"]; switch(m) { case "a": a(); break; ..... ..... } } 

C #

 public ssortingng LoadSsortingng() { return "my ssortingng"; } 

JS / jQuery

 $('#txt').val(<%= LoadString() %>); 

En fait, vous ne pouvez pas appeler des méthodes non statiques de cette façon.

Lorsque vous appelez un PageMethod, vous appelez essentiellement un service Web spécial. Cette fonctionnalité ne fonctionne qu’avec des méthodes statiques sur la même page.

En réponse à Pramulia, je pense que vous voulez avoir une fonction avec un argument côté client qui est implémenté dans l’exemple -> CallServer (arg1, arg2)

 <%@ Page Language="C#" AutoEventWireup="true" %> <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>    Client Callbacks     

Client Callbacks Without Postbacks


J’ai fini par utiliser des champs cachés au cas où quelqu’un lirait ceci. Je peux définir la valeur dans c # sous une fonction, puis la lire en javascript.

Si vous voulez l’appeler en utilisant la même fonction, vous pouvez utiliser le code suivant:

 [WebMethod] public static void method1() { ClassOfNonStaticFunction obj = new ClassOfNonStaticFunction(); obj.yourFunctionName(ParametersIfAny); } 

Dave a écrit en détail sur l’appel de méthodes de page côté client à l’aide de jquery ajax. L’idée générale est la suivante (si vous rencontrez un problème, veuillez vous reporter au site de Dave).

Code C #:

 [WebMethod] public static ssortingng yourmethod(/*params*/) { return "Hello World!" } 

ASPX:

 $.ajax({ type: 'POST', data: /*Your Data*/, dataType: 'JSON', contentType: 'application/json', url: '/yourpage.aspx/yourmethod',//Method to call success: function(result, status) { //handle return data }, error: function(xhr, status, error) { //handle error } });