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

本文关键字:调用 代码 隐藏 方法 函数 javascript | 更新日期: 2023-09-27 18:29:25

我有一个javascript函数,用于aspx页面中的HTML img单击事件。和一个服务器方法在其代码页后面。现在,我想只在用户单击HTML img时,才从javascript函数调用服务器方法,而不带任何参数。

C#代码隐藏方法:

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

JavaScriptMethod:

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

我还在主页中添加了:<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" EnablePageMethods="true" />

它不起作用。当我在Chrome上调试这个Javascript函数时我看到一个错误:未捕获引用错误:未定义PageMethods。

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

.aspx

     <div>
        <p>Say bye-bey to Postbacks.</p>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
        <asp:TextBox ID="txtname" runat="server"></asp:TextBox>
        <br />
        <asp:TextBox ID="txtaddress" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="HandleIT(); return false;" />
    </div>

JavaScript

<script type="text/javascript">
        function HandleIT() {
            var name = document.getElementById('<%=txtname.ClientID %>').value;
            var address = document.getElementById('<%=txtaddress.ClientID %>').value;
            PageMethods.ProcessIT(name, address, onSucess, onError); 
            function onSucess(result) {
                alert(result);
            }
            function onError(result) {
                alert('Something wrong.');
            }
        }
    </script>

C#

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

定义的WebMethods必须是"static"。

以下对WebMethod"GetAllRegions"的ajax调用运行良好,前提是WebMethod被定义为静态!!

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

WebMethod是这样定义的:

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

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

假设您的页面名称为abc.aspx,xyz是必须调用的函数名。javascript:
函数sendData(偏移量){$.ajax({类型:"POST",网址:"abc.aspx/xyz",contentType:"application/json;charset=utf-8",dataType:"json"});}

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

WebMethod(enableSession:=True)_公共共享函数xyz()为字符串您的代码在这里结束函数

在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>

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

试试这个

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

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

<asp:ImageButton runat="server" ID="btnPopUp" ImageUrl="img.png" OnClick="PopUpClick" />

为什么要直接使用img?

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

取消注释。

然后在你的方法中添加一个[ScriptMethod],如下所示:

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

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

然而,我刚刚做了一些研究,似乎您可能需要将使用PageMethods的代码放在ScriptManager的末尾/之后,因为您可能试图在PageMethods在JavaScript中声明之前使用它。或者,如果您使用的是jQuery,那么您可以在ready事件中执行它,这样您就知道页面和所有内容都已加载。我认为这可能是根本原因。

必须将web方法声明为静态和公共方法。

尽管您不能直接访问页面,但您可以将所需内容从客户端代码中的调用传递到web方法中,或者将所需信息存储在会话中或可从静态web方法访问的类似状态存储机制中。

这可能需要重新思考你想用它做什么。