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

时间:2013-08-29 12:15:19

标签: c# javascript asp.net .net scriptmanager

我在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();
    });

});

我也加入了母版页:<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" EnablePageMethods="true" />

它无效。当我在Chrome上调试此Javascript功能时 我看到一个错误:未捕获的参考错误:未定义PageMethods。

8 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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


function sendData(offset) {
    $.ajax({
    type: "POST",
    url: "abc.aspx/xyz",
    contentType: "application/json; charset=utf-8",
    dataType: "json"
    });
}

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


WebMethod(enableSession:=True) _
Public Shared Function xyz() As String
    your code here
End Function

在web.config中添加模块 - &gt; system.webServer


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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

以下对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 !!这应该有所帮助。

答案 4 :(得分:0)

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

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

为什么要直接使用img?

答案 5 :(得分:0)

试试这个

[WebMethod]

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

答案 6 :(得分:0)

顶部有一行说明取消注释,以便用JavaScript调用它。

取消注释。

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

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

然后,您应该可以从PageMethods对象中调用它。

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

答案 7 :(得分:0)

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

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

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