【问题标题】:How to use ajax with asp.net webforms如何在 asp.net 网络表单中使用 ajax
【发布时间】:2011-03-16 21:26:03
【问题描述】:

有没有什么方法可以使用 ajax(我正在使用 Jquery)和 asp.net 网络表单,而无需运行页面生命周期?

【问题讨论】:

  • 你为什么要这样做?
  • 因为当您只需要检索一些数据或通过 AJAX 执行的操作时,通过页面生命周期是没有意义的。

标签: jquery asp.net


【解决方案1】:

根据您要执行的操作,您可以使用 Web 方法或 Http 处理程序。 Web 方法可能更简单一些,并且只是用 [WebMethod] 属性修饰的服务器端静态函数。

这是一个例子:

C#:

[WebMethod]
public static string SayHello(string name)
{
    return "Hello " + name;
}

ASPX:

<asp:ScriptManager ID="sm" EnablePageMethods="true" runat="server"/>

<script type="text/javascript">
    #(function()
    {
        $(".hellobutton").click(function()
        {
            PageMethods.SayHello("Name", function(result)
            {
                alert(result);
            });
        });
    }
</script>

<input type="button" class="hellobutton" value="Say Hello" />

【讨论】:

    【解决方案2】:

    如果您使用 jQuery,正如您所提到的,您可以 use jQuery to call Page Methods directly,而不会产生 MicrosoftAjax.js 的开销以及它为启用 PageMethods.MethodName() 语法而生成的服务代理。

    给定 PageName.aspx 中名为 MethodName 的静态 [WebMethod] 装饰方法,这是一个如何在客户端调用它的示例:

    $.ajax({
      type: "POST",
      url: "PageName.aspx/MethodName",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
        // Do something interesting with msg.d here.
      }
    });
    

    【讨论】:

      【解决方案3】:

      您可以使用所谓的页面方法。

      它们本质上是Page 上的方法,但被声明为静态。

      public class MyPage : System.Web.UI.Page
      {
         [WebMethod]
         public static string Reverse(string message) {
            return message.Reverse();
         }
      }
      

      然后可以从客户端脚本中像这样使用它们:

      function reverseMyString(message) {
         // Magically generated code appears
         PageMethods.SendForm(message, OnSucceeded, OnFailed);
      }
      
      function OnSucceeded(result) { alert(result) }
      function OnFailed(error) { alert(error.get_message()) }
      

      与 asmx Web 服务相比,它们非常简洁,因为它们可以保留特定页面构建的相同 Web 表单功能。

      【讨论】:

        【解决方案4】:

        肯定有办法的。查看this answer。该特定示例在后端使用 MVC,但您可以使用基本的 ASP.NET 类似地执行此操作 - 只需查看调用 PageMethods/WebMethods via AJAX

        其中一个关键是声明一个带有 WebMethod 属性的静态方法。

        【讨论】:

        • 你也可以考虑 UpdatePanels,但它的缺点是,虽然它看起来像只有页面的一部分在刷新,但你仍然在回发整个 ViewState 并通过服务器上的整个页面生命周期。糟糕。
        • 所提供的链接应该能解释你需要的一切。
        猜你喜欢
        • 1970-01-01
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 2021-09-21
        • 1970-01-01
        相关资源
        最近更新 更多