visual studio services create crear consumir c# asp.net asmx webmethod

c# - studio - Llame al método no estático en el lado del servidor desde el lado del cliente utilizando JavsScript



web services asmx c# (8)

¿Cómo invoco un método no estático en el lado del servidor (aspx.cs) desde el lado del cliente usando javascript (aspx) ...?

Por lo que sé, puedo llamar al método estático en el lado del servidor desde el lado del cliente ...

lado del servidor:

[WebMethod] public static void method1() { }

lado del cliente:

<script language="JavaScript"> function keyUP() { PageMethods.method1(); } </script> <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> </asp:ScriptManager>

Funciona. Ahora, ¿cómo llamo al método no estático desde el lado del cliente?


DO#

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

JS / jQuery

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


En realidad, no puedes llamar a métodos no estáticos de esta manera.

Cuando llama a un PageMethod, básicamente está llamando a un servicio web especial. Esta característica solo funciona con métodos estáticos en la misma página.


No, no puede llamar métodos no estáticos desde el lado del cliente per se. Lo probé una vez, pero es feo (también usé jQuery ajax). Simplemente llame a la página usando ajax con el nombre del método agregado como parámetro de cadena de consulta y luego, en el lado del servidor, verifique el parámetro y llame al método relevante. Pero como te he dicho, es bastante feo :(

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

en el lado del servidor:

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


Puede evitar la restricción estática utilizando una página .asmx simple en lugar de la página de código siguiente.

1) Abra el nuevo sitio web utilizando la plantilla AJAX Habilitar ASP.NET (coloca las referencias necesarias en el web.config)

2) SIMPLESERVICE.ASMX: agregue un nuevo servicio web .asmx (llamé a SimpleService.asmx) Observe la decoración [System.Web.Script.Services.ScriptSerive] y que la clase SimpleService implemente 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 <strong>" + name + "</strong>, the time here is: " + DateTime.Now.ToShortTimeString(); } }

3) DEFAULT.ASPX: para usarlo, haga referencia al servicio en su administrador de secuencias de comandos y estará apagado y en ejecución. En mi Javascript llamo el 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"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> <script language="javascript" type="text/javascript"> function callServer() { SimpleService.GetMessage($get("Name").value, displayMessageCallback); } function displayMessageCallback(result) { $get("message").innerHTML = result; } </script> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" > <Services> <asp:ServiceReference Path="~/SimpleService.asmx" /> </Services> </asp:ScriptManager> <div> </div> <h1>Hello World Example</h1> <div> Enter Name: <input id="Name" type="text" /> <a href="javascript:callServer()">Call Server</a> <div id="message"></div> </div> </form> </body> </html>

Utilicé el ejemplo que encontré de Scott Gu Found Here.


Si desea llamarlo usando la misma función, puede usar el siguiente código:

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


Terminé usando campos ocultos en caso de que alguien lea esto. Puedo establecer el valor en c # debajo de una función y luego leerlo en javascript.


como respuesta a Pramulia, creo que desea tener una función con un argumento del lado del cliente que se implementa en el ejemplo -> 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"> <html > <head runat="server"> <title>Client Callbacks</title> <script runat="server"> public void RaiseCallbackEvent(String eventArgument) { // Processes a callback event on the server using the event // argument from the client. } public string GetCallbackResult() { // Returns the results of a callback event to the client. string dateString = DateTime.Now.ToLongDateString(); return dateString; } void Page_Load(object sender, EventArgs e) { ClientScriptManager cm = Page.ClientScript; String cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", ""); String callbackScript = "function CallServer(arg, context) {" + cbReference + "; }"; cm.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true); } </script> <script type="text/javascript"> function ReceiveServerData(arg, context) { Message.innerText = "Date from server: " + arg; } </script> </head> <body> <h2>Client Callbacks Without Postbacks</h2> <form id="form1" runat="server"> <input type="button" value="Callback" onclick="CallServer(''1'', alert(''Callback sent to Server''))" /> <br /> <span id="Message"></span> </form> </body> </html>


Dave ha escrito en detalle sobre cómo llamar a los métodos de página desde el lado del cliente usando jquery ajax. La idea general es así (si encuentra algún problema, consulte el sitio de Dave).

Código 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 } });