帮我理解网页方法?

时间:2009-10-06 12:31:09

标签: asp.net asmx httphandler

我在标有webmethod和scriptmethod标签的页面上有一个方法..

该方法将一个对象集合作为JSON数据返回给jquery函数,没有麻烦,我无需手动序列化它。

我现在正在尝试使用HTTPHandler重新创建相同的方法,并且想知道为什么我现在必须手动序列化数据。

是什么让网络方法与众不同?

3 个答案:

答案 0 :(得分:1)

因为HTTP处理程序(种类)位于ASP WebForms堆栈之上,所以您对处理程序的工作和输出负全部责任。

你可以利用(几乎)你可以在.NET框架中掌握的任何东西,但可以肯定的是,HTTPHandler将比ASP.NET提供的现成解决方案更多的工作。

  

ASP.NET页面处理程序只有一个   处理程序的类型。 ASP.NET附带   其他几个内置处理程序   作为.asmx的Web服务处理程序   文件。

     

您可以创建自定义HTTP处理程序   当你想要特殊处理时   您可以使用文件名识别   应用程序中的扩展

请参阅http://msdn.microsoft.com/en-us/library/ms227675(VS.85).aspx

答案 1 :(得分:0)

Web方法为您提供c#类和Js文件之间的连接。现在使用Json是以智能格式为js函数或js文件中的任何位置获取返回消息的最佳方式。

此致

答案 2 :(得分:0)

对于较少的工作: 将您的方法移动到ASMX(Web服务): 您将受益于ScriptService提供的内置序列化:

namespace WS{

  [System.web.Script.Services.ScriptService()] 
  [System.Web.Services.WebService(Namespace:="http://tempuri.org/")]
  public class WebService1 : System.Web.Services.WebService
  {
      [WebMethod]  
      public Person GetDummyPerson()
      {
          Person p = new Person();
          p.Name = "John Wayne";
          p.Age = 20;
      }

      [WebMethod] 
      public IList GetPersonsByAge(int age)
      {
          //do actual data retrieval
          List result = new List();
          result.add(new Person());
          result.add(new Person());
          return result; 
      }
  }

  class Person 
  {
      String Name;
      int Age;
  }

}

在客户端:

WS.GetDummyPerson(function(p){
    alert(p.Name + "-->" + p.Age);
});

WS.GetPersonsByAge(10,function(list){
   for(var i=0;i<list.length;i++)
   {
      document.write(list[i].Name + "==>" + list[i].Age);
   }
});