2

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

方法背后的 C# 代码:

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

JavaScript方法:

 $(document).ready(function () {

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

});

我还添加到母版页中:<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" EnablePageMethods="true" />

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

4

8 回答 8

5

.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;
    }
于 2013-08-29T12:54:13.520 回答
2

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

函数发送数据(偏移量){
    $.ajax({
    类型:“发布”,
    网址:“abc.aspx/xyz”,
    contentType: "应用程序/json; charset=utf-8",
    数据类型:“json”
    });
}

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

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

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

->system.webServer>
    ->模块>
    -> 添加名称="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    ->/模块>
->/system.webServer>

于 2014-04-25T06:17:25.970 回答
2

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

以下对 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 通过传递 data 参数将 JSON 数据传递给 WebMethod!这应该会有所帮助。

于 2014-01-23T04:33:50.847 回答
1

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

于 2013-08-29T12:19:56.023 回答
0

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

取消注释。

然后也[ScriptMethod]像这样添加到您的方法中:

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

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

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

于 2013-08-29T12:32:11.350 回答
0

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

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

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

于 2013-09-18T17:11:47.090 回答
0

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

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

为什么要直接使用img?

于 2013-08-29T12:19:08.577 回答
0

尝试这个

[WebMethod]

  public static void PopUpClick(object sender, EventArgs e)
    {
        //Something;
    }
于 2013-08-29T12:23:46.107 回答