使用JavsScript从客户端调用服务器端的非静态方法

如何在客户端使用javascript(aspx)….在服务器端(aspx.cs)调用非静态方法….?

据我所知,我可以从客户端在服务器端调用静态方法…

服务器端:

[WebMethod] public static void method1() { } 

客户端:

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

有用。 现在我该如何从客户端调用非静态方法?

您可以通过使用简单的.asmx页面而不是隐藏页面来避免静态约束。

1)使用AJAX启用ASP.NET模板打开新网站(它将必要的引用放在web.config中)

2)SIMPLESERVICE.ASMX – 添加一个新的.asmx web服务(我称之为我的SimpleService.asmx)请注意[System.Web.Script.Services.ScriptSerive]修饰,并且SimpleService类实现了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 – 要使用它参考脚本pipe理器中的服务,你已经closures并正在运行。 在我的Javascript中,我调用了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> 

我使用了从Scott Gu Found Here中find的例子。

不,你不能从客户端本身调用非静态方法。 我曾尝试过一次,但它是丑陋的(我也用jQuery ajax)。 只需使用方法名称作为查询string参数,然后在服务器端检查参数并调用相关的方法使用ajax调用页面。 但正如我告诉你,这是非常丑陋的:(

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

在服务器端:

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

其实,你不会这样调用非静态方法。

当你调用PageMethod时,你基本上调用了一个特殊的Web服务。 此function仅适用于同一页面上的静态方法。

C#

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

JS / jQuery的

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

作为普拉密利亚的答案,我认为你想要在客户端实现一个参数,在例子中实现 – > 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> 

最好的链接之一是:

https://msdn.microsoft.com/en-us/library/aa479042.aspx

解释非常好。 仔细按照步骤操作,不要忘记在Web.config中进行更改。 使用示例代码链接中给出的configuration在这里input图像描述

如果你想使用相同的函数来调用它,你可以使用下面的代码:

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

Dave详细地写了关于使用jquery ajax从客户端调用页面方法。 一般的想法是这样的(如果你发现任何问题,请参考戴夫的网站)。

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