如何从javascript函数调用代码隐藏方法?

我在aspx页面中有一个HTML img click事件的javascript函数。 并且在其代码后面有一个服务器方法。现在我只想在用户点击HTML img时从javascript函数调用服务器方法而不使用任何参数。

方法背后的C#代码:

[WebMethod] public void PopUpClick(object sender, EventArgs e) { //Something; } 

JavaScriptMethod:

  $(document).ready(function () { $('.clickme').click(function () { PageMethods.PopUpClick(); }); }); 

我也加入了母版页:

它无法正常工作。当我在Chrome上调试此Javascript函数时,我看到了一个错误:未捕获的参考错误:未定义PageMethods。

的.aspx

  

Say bye-bey to Postbacks.



JavaScript的

  

C#

  [WebMethod] public static string ProcessIT(string name, string address) { string result = "Welcome Mr. " + name + ". Your address is '" + address + "'."; return result; } 

后端C#代码与前端JavaScript代码分开。 JS在客户端运行,C#在服务器端运行。 为了让前端代码触发后端函数,您需要使用函数来执行表单回发或使用Ajax(或等效函数)来调用该页面函数。

定义的WebMethod必须是“静态的”。

以下ajax调用WebMethod“GetAllRegions”工作正常,只要WebMethod定义为静态!

 $.ajax({ type: "POST", url: 'GenerateEAInHtml.aspx/GetAllRegions', data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", }); 

WebMethod以这种方式定义:

 [WebMethod] public static List GetAllRegions() { /* Your Code goes here */ return regions; } 

您可能希望使用此Ajax Post通过传递数据参数将JSON数据传递给WebMethod! 这应该有所帮助。

假设您的页面名称是abc.aspx和xyz是您必须调用的函数名称。 javascript:


 function sendData(offset){
     $就({
    类型:“POST”,
     url:“abc.aspx / xyz”,
     contentType:“application / json; charset = utf-8”,
     dataType:“json”
     });
 }

服务器端:添加Imports System.Web.Script.Serialization


 WebMethod(enableSession:= True)_
公共共享函数xyz()As String
    你的代码在这里
结束function

在web.config中添加模块 – > system.webServer


 - > system.webServer>
     - >模块>
     - > add name =“ScriptModule”preCondition =“managedHandler”type =“System.Web.Handlers.ScriptModule,System.Web.Extensions,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31BF3856AD364E35”/>
     - > /模块>
 - > / system.webServer>

试试这个

 [WebMethod] public static void PopUpClick(object sender, EventArgs e) { //Something; } 

使用ImageButton 。 处理程序不需要标记为[WebMethod]

  

你为什么要直接使用img?

顶部有一行表示取消注释,以便通过JavaScript调用它。

取消注释。

然后还为您的方法添加[ScriptMethod] ,如下所示:

 [WebMethod] [ScriptMethod] public void PopUpClick(object sender, EventArgs e) { // Something; } 

然后,您应该能够从PageMethods对象中调用它。

但是我刚做了一些研究,似乎你可能需要在ScriptManager的末尾/后面放置使用PageMethods的代码,因为你可能在JavaScript中声明之前尝试使用PageMethods 。 或者,如果您正在使用jQuery,那么您可以在ready事件中执行此操作,以便您知道页面并且所有内容都已加载。 我认为这可能会成为根本原因。

Web方法必须声明为static和public。

虽然您无法直接访问该页面,但您可以通过客户端代码中的调用将所需内容传递到Web方法中,或者在会话中存储您需要的内容或可从静态Web访问的类似状态存储机制方法。

这可能需要重新考虑你正在尝试用它做什么。