代码之家  ›  专栏  ›  技术社区  ›  Matt

使用jQuery调用ASP.NET PageMethod/WebMethod-返回整个页面

  •  35
  • Matt  · 技术社区  · 17 年前

    public static,返回字符串,不接受任何参数。我甚至尝试在我的类的顶部添加[ScriptService],看看它是否有帮助,但没有。

    我看过这篇文章 Jquery AJAX with ASP.NET WebMethod Returning Entire Page 这和我的症状一样,但我仍然有问题。我读 http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ 我觉得我在跟踪这件事,但还是没有运气。

    我打的jQuery电话是:

    jQuery.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: '{}',
        dataType: 'json',
        url: 'MyPage.aspx/SomePageMethod',
        success: function(result){
            alert(result);
        }
    });
    

    根据FF3中的Firebug,请求/响应头如下

    Response Headers
    Server  ASP.NET Development Server/8.0.0.0
    Date    Tue, 24 Feb 2009 18:58:27 GMT
    X-AspNet-Version    2.0.50727
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Content-Length  108558
    Connection  Close
    
    Request Headers 
    Host    localhost:2624
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
    Accept  application/json, text/javascript, */*
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  300
    Connection  keep-alive
    Content-Type    application/json; charset=utf-8
    X-Requested-With XMLHttpRequest
    Referer http://localhost:2624/MyApp/MyPage.aspx
    Content-Length  2
    Cookie  ASP.NET_SessionId=g1idhx55b5awyi55fvorj055; 
    

    我在我的页面上添加了一个ScriptManager,只是为了好玩,看看它是否有帮助,但运气不好。

    有什么建议吗?

    7 回复  |  直到 9 年前
        1
  •  28
  •   Dave Ward    17 年前

    您知道页面方法工作正常吗?如果使用ScriptManager,它们是否工作?

    听起来你可能失踪了 a web.config entry

        2
  •  24
  •   CDspace Matrix    8 年前

    我的web.config中缺少一行:

    <system.web>
      <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </httpModules>
    </system.web>
    
        3
  •  13
  •   Matt    16 年前

    contentType: 'application/json'
    

    并且得到了一个完整的页面响应,而不是对WebMethod的调用。

        4
  •  7
  •   Marvin Zumbado    11 年前

    如果您已经尝试了所有这些,但仍然从pagemethod返回了整个页面,那么您可能需要确保您没有使用友好的URL。 如果你正在使用它们,这个技巧可能会对你有所帮助

    在调用之前,在js脚本中添加以下行:

    PageMethods.set_path(PageMethods.get_path() + '.aspx');
    
        5
  •  1
  •   Dan Simon    15 年前

    loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "Default.aspx" : loc;
            $.ajax({
                type: "POST",
                url: loc + "/" + methodName,
                data: "{" + args + "}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: onSuccess,
                error: onFail
            });
    

    它无法正确提取.aspx链接,所以我只是硬编码了我的网页,而不是使用loc变量。

        6
  •  1
  •   Hassan Nazeer    7 年前

    在RouteConfig.cs中对以下行进行注释对我很有用

     settings.AutoRedirectMode = RedirectMode.Permanent;
    
        7
  •  0
  •   I give up will learn js I give up will learn js    17 年前

    我见过的大多数ajax场景实际上应该调用web服务或单独的脚本处理程序,而不是页面。这在.NET3-5中非常容易做到,而在2-0中就不那么容易了。即使在您弄清楚(如果)如何不加载整个页面后,以下是不调用页面方法的原因:

    2) 糟糕的职责分离。页面可能负责很好地布局内容,而不是ajax方法中使用的逻辑。

    我目前正在更新关于这个主题的知识。。。我将在这个帖子中寻找这个问题的好答案,或者我将在下周发布一个。这是我的方向

    1) 将JSON从服务器发送到客户端,并使用javascript更新页面。-多种框架使得从web服务器生成JSON变得容易。
    2) JQuery使ajax调用、json处理和客户端格式化变得有趣,而不是痛苦。

        8
  •  0
  •   Sotiris Zegiannis    8 年前

    经过将近两个小时的努力,我终于解决了它。@Marvin Zumbado的评论帮助了我。我的url中缺少了.aspx。我知道这不是我作为程序员的最佳时刻!

    推荐文章