jQuery不会调用ASP.NET WebMethod

时间:2013-11-06 09:34:54

标签: jquery asp.net webmethod

我知道有很多像这样的问题,但我无法用这些答案解决我的问题。

我有基本页面,上面有:

<body>
<form id="form1" runat="server">
    <div id="Result">
        <asp:ScriptManager ID="ScriptManager1"
            EnableScriptGlobalization="true"
            EnableScriptLocalization="true"
            EnablePageMethods="true"
            EnablePartialRendering="true" runat="server" />

        <script type="text/javascript">

            $(document).ready(function () {
                $("#txtSearch").bind("change", search);

            });

            function test() {
                alert("asdadadaads");
            }

            function search() {
                $.ajax({
                    type: "POST",
                    url: "~/Search.aspx/GetRegion",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        alert(msg.d)
                    }
                });
            }
        </script>

        <asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>
    </div>
</form>

我可以调用测试功能并显示警报。同样在Firebug中,我看到也调用了search()函数,但我无法进入WebMethod背后的代码。

WebMethod是这样的:

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static void GetRegion()
    {
        SearchService.Service1 client = new Service1();

    }

我对此感到疯狂,所以,如果你能提供帮助,谢谢你。)

1 个答案:

答案 0 :(得分:1)

  1. 在$ .ajax请求中从网址中删除〜。
  2. 不需要ScriptManager //即使你没有改变也无所谓
  3. search()功能置于(document).ready()功能之外。即使您没有更改也无关紧要
  4. 更改$("#txtSearch").bind("change", search); =&gt; $("#txtSearch").change(search); //即使你没有改变也没关系
  5. 还要确保呈现相同的标识txtSearch(如果使用母版页,则可能无法呈现相同内容)。您可以使用<%:txtSeacrh.ClientId%>在HTML标记中获取clientId。
  6. 如果页面加载时DOM中存在bind,则无需使用txtSearch函数。而且jQuery更喜欢使用on函数。

    $( "#txtSearch" ).on( "change", search);
    

    jsFiddle