如何从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访问的类似状态存储机制方法。
这可能需要重新考虑你正在尝试用它做什么。