当前位置: 首页 > 面试题库 >

updatepanel vs页面方法

聂鹏云
2023-03-14
问题内容

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

所以我的问题是:

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

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


问题答案:

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

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

考虑以下文章:

  • 为什么不应该将整个站点放在UpdatePanel中

  • UpdatePanel是邪恶的

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

看一看:

  • ASP.NET事件验证和“无效的回调或回发参数”:第一部分

  • ASP.NET事件验证和“无效的回调或回发参数”:第二部分

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



 类似资料:
  • 因为我们打算把jsp放在WEB-INF下,然后WEB-INF下的文件是不能直接访问的,所以加个跳转的方法 @At("/") @Ok("jsp:jsp.user.list") // 真实路径是 /WEB-INF/jsp/user/list.jsp public void index() { } 手册关联(选修) 视图

  • 本文向大家介绍js父页面中使用子页面的方法,包括了js父页面中使用子页面的方法的使用技巧和注意事项,需要的朋友参考一下 iframe是非常常用的一个html元素,如果在父页面中使用子页面的方法应该怎么写呢,下面就做一下简单的介绍。 一、父页面代码 二、iframe中的代码 上面两个代码可以在父页面和子页面对对方的函数进行相互调用,比较简单,不多介绍了。 希望本文所述对大家学习javascript程

  • 本文向大家介绍两个JSP页面父页面获取子页面内容的两种方法,包括了两个JSP页面父页面获取子页面内容的两种方法的使用技巧和注意事项,需要的朋友参考一下 需求说明:两个JSP页面,父页面需要子页面的内容,但子页面是隐藏的,具体来说,子页面是一系列的模板,父页面要通过id来获取这些模板,不愿意通过<include>方式导入,因为如果模板过多,就导致整个父页面太大,加载缓慢,以下两个方案,不知有没有解决

  • 本文向大家介绍js实现页面a向页面b传参的方法,包括了js实现页面a向页面b传参的方法的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了js实现页面a向页面b传参的具体方法,供大家参考,具体内容如下 方法一:使用HTML5本地化存储(localStorage) 组件(本地最大能存储5M数据)localStorage是本地永久存储数据,是cookie的优化 方法二:使用cookie将数据存放

  • MIP Page 最大的工作在于将多个独立的页面融合在一起,让它们拥有像单页应用 (SPA) 那样的切换效果和使用体验,解决“第二跳”的问题。这一部分简单讨论一下它的实现方案。 方案核心主要有以下几点: MIP Page 借助 iframe 实现了页面之间的互相隔离 通过 iframe 和外界的通讯来实现页面之间的通讯和传递数据 为了加载性能考虑,第一个页面维持原状,不放入 iframe 之中。

  • 本文向大家介绍Django url,从一个页面调到另个页面的方法,包括了Django url,从一个页面调到另个页面的方法的使用技巧和注意事项,需要的朋友参考一下 创建项目和应用 ————–1.采用/add?a=4&b=5这样GET方法进行————————— 修改 calc/view.py文件 修改 zqxt_views/urls.py 文件,添加一个网址来对应我们刚才新建的视图函数。 打开服务器