updatepanel与页面方法

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应用程序会更好.