我在标有webmethod和scriptmethod标签的页面上有一个方法..
该方法将一个对象集合作为JSON数据返回给jquery函数,没有麻烦,我无需手动序列化它。
我现在正在尝试使用HTTPHandler重新创建相同的方法,并且想知道为什么我现在必须手动序列化数据。
是什么让网络方法与众不同?
答案 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);
}
});