小编典典

updatepanel vs页面方法

ajax

update panels一直在想更新页面的特定部分,但是最近我遇到了性能问题(我的意思是呈现预期控件的速度很慢,有时它不起作用,需要多次单击才能工作!!!

所以我的问题是:

  • 页面方法是否可以被认为是更新面板的一种有效替代方法ajax
  • 还有哪些其他选择?

请尽可能提供一个简单的例子来阐明如何用页面方法替换更新面板?


阅读 254

收藏
2020-07-26

共1个答案

小编典典

几年前我曾经是和你一样,我曾经使用UpdatePanel增益性能,有错误的想法,我增加了我的应用程序的性能

好吧,我完全错了,它UpdatePanel是所有UI邪恶的根源,首先,它 掩盖
了使用AJAX的复杂性,这使我们大多数人都容易使用,这使我们产生了错误的想法,即我们正在创建响应式应用程序,这比如果我们根本不使用它(这是我以前在所有页面上都使用它的主要原因,并且我相信这就是许多开发人员使用它的原因…因为这很容易)。

考虑以下文章:

当您了解UpdatePanelPageMethodREST 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方法并指定 第二个下拉列表中的每个值
,但这将增加页面大小,并且显然,这不是一个好选择

看一看:

因此,作为总结,如果您想摆脱所有UpdatePanel控件,则需要将现有服务器控件替换为javascript友好控件。还要记住,如果这样做,则不必依靠页面发布机制,而必须使用AJAX在服务器上执行操作,否则,将获得
Invalid postback或callback参数。 例外。换句话说,如果可能,最好考虑迁移到MVC应用程序。

2020-07-26