Chiamare il metodo non statico sul lato server dal lato client usando JavsScript

Come posso chiamare un metodo non statico sul lato server (aspx.cs) dal lato client usando javascript (aspx) ….?

Per quanto ne so posso chiamare il metodo statico sul lato server dal lato client …

lato server:

[WebMethod] public static void method1() { } 

dalla parte del cliente:

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

Funziona. Come si chiama il metodo non statico dal lato client?

    È ansible evitare il vincolo statico utilizzando una semplice pagina .asmx anziché la pagina codebehind.

    1) Apri un nuovo sito Web utilizzando il modello AJAX Enable ASP.NET (inserisce i riferimenti necessari nel web.config)

    2) SIMPLESERVICE.ASMX – Aggiungi un nuovo servizio web .asmx (ho chiamato il mio SimpleService.asmx) Notare la decorazione [System.Web.Script.Services.ScriptSerive] e che la class SimpleService implementa Webservice.

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

    3) DEFAULT.ASPX – Per usarlo, fai riferimento al servizio nel tuo gestore di script e sei fuori servizio. Nel mio Javascript chiamo class.method – SimpleService.GetMessage.

     < %@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   Untitled Page    

    Hello World Example

    Enter Name: Call Server

    Ho usato l’esempio che ho trovato da Scott Gu Found Here.

    No, non è ansible chiamare metodi non statici dal lato client di per sé. L’ho provato una volta ma è brutto (anche io ho usato jQuery ajax). Basta chiamare la pagina usando ajax con il nome del metodo aggiunto ad esso come parametro stringa di query e quindi sul lato server controllare il parametro e chiamare il metodo pertinente. Ma come ti ho detto è piuttosto brutto 🙁

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

    sul lato server:

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

    C #

     public string LoadString() { return "my string"; } 

    JS / jQuery

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

    In realtà, non puoi chiamare metodi non statici in questo modo.

    Quando chiami un PageMethod, stai praticamente chiamando un servizio web speciale. Questa funzione funziona solo con metodi statici sulla stessa pagina.

    come risposta a Pramulia penso che tu voglia avere una funzione con un argomento dal lato client che è implementato nell’esempio -> CallServer (arg1, arg2)

     < %@ Page Language="C#" AutoEventWireup="true" %> < %@ Implements Interface="System.Web.UI.ICallbackEventHandler" %> < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   Client Callbacks     

    Client Callbacks Without Postbacks


    Ho finito per usare i campi nascosti nel caso qualcuno lo leggesse. Posso impostare il valore in c # sotto una funzione e poi leggerlo in javascript.

    Se vuoi chiamarlo usando la stessa funzione, puoi usare il seguente codice:

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

    Dave ha scritto in dettaglio sulla chiamata dei metodi di pagina dal lato client usando jquery ajax. L’idea generale è come questa (se trovi qualche problema, fai riferimento al sito di Dave).

    Codice C #:

     [WebMethod] public static string 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 } });