如何使用带有Web窗体的JSON服务AJAX调用?

时间:2010-03-02 06:55:32

标签: asp.net ajax json asp.net-ajax

我知道MVC控制器非常擅长提供JSON格式的AJAX请求,但是我是否可以使用内置的ASP.NET功能从普通的旧Web表单站点进行这些类型的调用?

5 个答案:

答案 0 :(得分:14)

您可以使用内置的ASP.NET AJAX。

选项1 - 使用Web服务(如果您希望功能可重用):

  • 使用[ScriptService]属性
  • 创建Web服务(.asmx)
  • 将a添加到您的页面并将Web服务添加到其Services集合
  • 使用ScriptManager在您的页面中生成的JavaScript代理。

选项2 - 使用页面方法(如果您希望单页上的功能而不创建Web服务):

  • 在页面中定义静态方法,为它们添加[WebMethod]属性,
  • 使用EnablePageMethods =“true”,
  • 添加ScriptManager
  • 使用PageMethods对象从JavaScript调用这些方法。

在任何一种情况下,JSON都将用于数据传输。

这是一个包含一些代码示例的广泛tutorial

然而,ASP.NET AJAX经常被指责为效率低下 - 例如,它生成的JS往往相当大。所以,如果你关心性能,你需要彻底测试它。

您可能还会看一下这个主题:.NET AJAX Calls to ASMX or ASPX or ASHX?

答案 1 :(得分:2)

使用通用网络处理程序。即 ashx 。这些甚至比 MVC 操作更快。

答案 2 :(得分:2)

答案 3 :(得分:0)

如果您在服务器上安装了.NET 3.5,则可以利用框架附带的JSON serialization tools

这使用DataContractJsonserializer类。

答案 4 :(得分:0)

此方案中我首选的方法是使用通用Web处理程序(.ashx)和JSON.net http://james.newtonking.com/json

它简单,快速,轻便。

一个简单的例子是:

public void ProcessRequest(HttpContext context)
{
        string jsonOutput = string.Empty;
        context.Response.ContentType = "application/json";
        using (var db = new MyDBContext())
        {
            var dbResult = db.myobject.select();
            jsonOutput = Newtonsoft.Json.JsonConvert.SerializeObject(dbResult);
        }
        context.Response.Write(jsonOutput); 
}