您能帮助我了解 ASP.NET 中从浏览器到客户端进行通信的所有不同方式吗?我已将其设为社区 wiki,因此请随意编辑我的帖子以改进它。具体来说,我试图通过列出每种方法的工作原理来了解在哪种情况下使用每种方法。
我对 UpdatePanel 与 CallBack(使用 ViewState)有点模糊:我知道 UpdatePanel 总是返回 HTML,而 CallBack 可以返回 JSON。还有其他主要区别吗?
...以及 CallBack(无 ViewState)与 WebMethod。 CallBack 经历大部分页面生命周期,而 WebMethod 则不然。还有其他主要区别吗?
IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx
- Custom handler for anything (page, image, etc.)
- 只做你告诉它做的事(轻服务器处理、轻流量)
-
Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx是一个实现IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx
- 如果你不需要什么Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx提供、创建自定义IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx
- 如果您正在使用Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx但压倒一切Render() http://msdn.microsoft.com/en-us/library/20b8wk8d%28v=VS.100%29.aspx并且不生成 HTML,您可能可以使用自定义来完成IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx(例如写入图像等二进制数据)
- By default can use the .axd or .ashx file extensions -- both are functionally similar
- .ashx 没有任何内置端点,因此按照惯例它是首选
定期回发(系统.Web.UI.页面 http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx : IHttpHandler http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx)
- Inherits Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx
- 完整回发,包括视图状态 http://msdn.microsoft.com/en-us/library/ms972976.aspx和 HTML 控制值(交通繁忙)
- Full Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx 生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx (繁重的服务器处理)
- 无需 JavaScript
- 由于所有内容都已在浏览器中重新加载,因此网页闪烁/滚动
- 返回整页 HTML (交通繁忙)
更新面板 http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx (系统.Web.UI.控制 http://msdn.microsoft.com/en-us/library/system.web.ui.control.aspx)
- Control inside Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx
- 完整回发,包括视图状态 http://msdn.microsoft.com/en-us/library/ms972976.aspx和 HTML 控制值(交通繁忙)
- Full Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx 生命周期 http://msdn.microsoft.com/en-us/library/ms178472.aspx (繁重的服务器处理)
- 外部控制更新面板 http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx进行渲染(NullTextWriter)
- Must use ScriptManager http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx
- 如果没有客户端 JavaScript,它可以回退到没有 JavaScript 的常规 PostBack(?)
- 没有闪烁/滚动,因为它是异步调用,除非它回退到常规回发。
- 可与母版页和用户控件一起使用
- 具有对进度条的内置支持
- 返回内部控件的 HTML更新面板 http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx (中等流量)
客户端回调 http://msdn.microsoft.com/en-us/library/ms178208.aspx (Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx, System.Web.UI.ICallbackEventHandler http://msdn.microsoft.com/en-us/library/system.web.ui.icallbackeventhandler.aspx)
- Inherits Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx
- Most of Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx 生命周期 http://edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ADF/ajax_callback.htm- 没有渲染,但必须创建控制树(繁重的服务器处理)
- 仅采用您指定的数据(交通畅通)和可选的视图状态 http://msdn.microsoft.com/en-us/library/ms972976.aspx (?) (中等流量)
- 客户端必须支持JavaScript并使用脚本管理器 http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx
- 没有闪烁/滚动,因为它是异步调用
- 可与母版页和用户控件一起使用
- 仅以您指定的格式返回您指定的数据(例如 JSON、XML...)(?)(交通畅通)
- 在回调期间,页面必须在控件树中的同一位置添加关联的控件,否则会发生异常。
网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx (系统.Web.服务.WebService http://msdn.microsoft.com/en-us/library/system.web.services.webservice.aspx)
- 被认为是遗留技术。应该使用 WCF 服务代替 http://msdn.microsoft.com/en-us/library/aa738737.aspx.
- Class implements System.Web.Service.WebService http://msdn.microsoft.com/en-us/library/system.web.services.webservice.aspx
-
HttpContext http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx可以通过this.Context http://msdn.microsoft.com/en-us/library/system.web.services.webservice.context.aspx
- 仅采用您指定的数据(交通畅通)
- 服务器仅运行被调用的方法(轻服务器处理)
- 客户端必须支持JavaScript
- 没有闪烁/滚动,因为它是异步调用
- 可与母版页和用户控件一起使用
- Returns only data you specify, typically JSON (light traffic)
- 可以创建服务器控件的实例来呈现 HTML 并作为字符串发回,但事件、GridView 中的分页等将不起作用
页面方法 http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx
- Essentially a WebMethod http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx contained in the Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx class, so most of WebMethod http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx's bullet's apply
- As with 网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx,应该使用遗留技术和WCF服务。
- 方法必须是
public static
,因此没有Page http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx实例可访问
-
HttpContext http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx可以通过HttpContext.Current http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx
- Accessed directly by URL
Page.aspx/MethodName
(e.g. with XMLHttpRequest http://en.wikipedia.org/wiki/XMLHttpRequest directly or with library such as jQuery http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/)
- Setting
ScriptManager
财产EnablePageMethods="True"
生成 JavaScript 代理 http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/对于每个网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx
-
Cannot直接在用户控件中使用
- 带有母版页和用户控件
周转基金服务 http://msdn.microsoft.com/en-us/library/bb332338.aspx
- 取代网络方法 http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx and 页面方法 http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx
- 接口有服务合同属性 http://msdn.microsoft.com/en-us/library/system.servicemodel.servicecontractattribute.aspx
- 方法有操作合约属性 http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.aspx
- 与 WebMethod 具有相同的优点,而且更灵活
还有其他人吗?
WebMethod
与 ASMX Web 服务一起使用,微软现在将其视为“遗留技术”。应改用 WCF 服务。它们支持基于 HTTP/HTTPS 的 SOAP 以及基于 REST 或 JSON 的服务,因此更加灵活。
出于这个原因,我也建议不要PageMethods
,即使它们看起来很方便。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)