几年前我曾经是和你一样,我曾经使用
UpdatePanel到 增益性能,有错误的想法,我增加了我的应用程序的性能 …
好吧,我完全错了,它
UpdatePanel是所有UI邪恶的根源,首先,它 掩盖
了使用AJAX的复杂性,这使我们大多数人都容易使用,这使我们产生了错误的想法,即我们正在创建响应式应用程序,这比如果我们根本不使用它(这是我以前在所有页面上都使用它的主要原因,并且我相信这就是许多开发人员使用它的原因…因为这很容易)。
考虑以下文章:
为什么不应该将整个站点放在UpdatePanel中
UpdatePanel是邪恶的
当您了解
UpdatePanel对
PageMethodREST WCF服务或REST WCF服务的简单调用的真正作用时,您会发现它们之间的巨大差异。
UpdatePanel
。当您从中执行发布时,必须执行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调用(不带
UpdatePanel)进行相同的操作,则会遇到两个问题
渲染时,您需要手动将对象添加到
select
表示的HTML 控件中DropDownList
。您可以使用第三方框架使用javascript绑定这些控件,我建议您使用基因敲除 js (它很棒)这就是问题。
DropDownList
使用javascript 更改第二个内容 后,由于ViewState无效 , 因此无法在页面上进行简单发布 ,并且您将看到以下异常:
无效的回发或回调参数。
解决方法是指定哪些值在服务器端将是有效的,为此,您需要重写page
Render方法并指定 第二个下拉列表中的每个值
,但这将增加页面大小,并且显然,这不是一个好选择
看一看:
ASP.NET事件验证和“无效的回调或回发参数”:第一部分
ASP.NET事件验证和“无效的回调或回发参数”:第二部分
因此,作为总结,如果您想摆脱所有
UpdatePanel控件,则需要将现有服务器控件替换为javascript友好控件。还要记住,如果这样做,则不必依靠页面发布机制,而必须使用AJAX在服务器上执行操作,否则,将获得
Invalid postback或callback参数。 例外。换句话说,如果可能,最好考虑迁移到MVC应用程序。



