Any*_*are 6 c# asp.net ajax updatepanel pagemethods
我update panels
一直在使用,当我想要更新我的页面的特定部分但最近我遇到性能问题(我的意思是它渲染预期的控件很慢,有时它不起作用,需要多次点击工作!
所以我的问题是:
ajax
魔力?请尽可能一个简单的例子来阐明如何使用页面方法替换更新面板?
Jup*_*aol 16
几年前我曾经是和你一样,我曾经使用UpdatePanel
来提高性能,有错误的想法,我增加了我的应用程序的性能 ...
嗯,我完全错了,UpdatePanel
是所有UI邪恶的根源,首先它隐藏了使用AJAX的复杂性,这使我们大多数人都很容易,给我们错误的想法,我们正在创建响应式应用程序,这是最糟糕的如果我们根本不使用它(这是我以前在我的所有页面中使用它的主要原因,我确信这就是许多开发人员使用它的原因......因为它很容易).
请考虑以下文章:
当您了解UpdatePanel
对一个PageMethod
或一个REST WCF服务的简单调用的真正作用时,您将看到它们之间的巨大差异.
UpdatePanel
.当你从a执行一个帖子时,必须执行UpdatePanel
整个页面生命周期,这意味着,它需要在每个帖子上发送所有页面ViewState,当你的页面增加了几个控件的复杂性时,ViewState肯定会很大这肯定是一个性能问题.使用它们只能获得部分渲染,UpdatePanel
虽然您需要在每个请求上发送整个ViewState,但您的内部控件将在没有完整回发的情况下呈现.
PageMethod
.页面方法是static
,如果它们是服务方法,它们被调用,它们不需要创建整个页面生命周期以便执行,因此,它们执行得更快.
所以似乎使用PageMethods
是解决方案,问题是PageMethods
通常用于返回JSON对象,这意味着您必须手动渲染这些对象.这意味着,如果你想摆脱所有你UpdatePanel
需要更改视图中使用的控件,你将无法使用GridView
开箱即用,而是你必须改变它适用于JQGrid(或类似物).
如果您正在创建MVC应用程序,这是很自然的,但对于传统的ASP.Net,这并不简单.
您还需要考虑一些非常重要的事情,默认情况下会在每个帖子上验证ViewState,您可以将其关闭,但如果您想确保您的ViewState没有被破坏,则不建议这样做(请看一下这个问题) .
考虑这个例子,你有两个DropDownList
控件,(名为:ddl1,ddl2)ddl2取决于ddl1所以使用SelectedIndexChanged
你填充第二个下拉列表的事件.但是如果你尝试使用AJAX调用(没有a UpdatePanel
)做同样的事情,你将面临两个问题
渲染时,需要手动将对象添加到select
表示的HTML 控件中DropDownList
.你可以使用第三方框架使用javascript绑定这些控件,我可以推荐你knockoutjs(它太棒了)
这就是问题.DropDownList
使用javascript 更改第二个内容后, 您无法对页面进行简单的发布,因为ViewState无效,您将看到以下异常:
无效的回发或回调参数.
解决方法是指定哪些值在服务器端有效,为了做到这一点,您需要覆盖页面Render
方法并指定第二个下拉列表中的每个值,但这会增加页面大小,显然,这不是一个好选择
看一看:
总而言之,如果您希望摆脱所有UpdatePanel
控件,则需要替换现有的服务器控件以实现对javascript友好的控件.另请注意,如果您这样做,而不是依赖于页面发布机制,则必须使用AJAX在服务器上执行操作,否则,您将获得无效的回发或回调参数.例外.换句话说,如果可能的话,考虑转移到MVC应用程序会更好.