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