【问题标题】:Is there a better way to update content via ajax in ASP.Net web forms thanUpdatePanels?有没有比UpdatePanels 更好的方法来通过ASP.Net Web 表单中的ajax 更新内容?
【发布时间】:2010-08-24 16:18:36
【问题描述】:

我认为自己在 Web UI 开发方面知识渊博,在过去的四年中我学到了很多关于 ASP.Net Web 表单的知识,但我仍然没有找到通过 Ajax 更新页面部分的好方法.我已经完成了几种不同的方法,这些方法基本上涉及由某种 .aspx 页面或处理程序加载的用户控件。这很好用,但不是很通用,并且通常会遇到任何甚至中等复杂的 ViewState 问题。

我会更早跳到 UpdatePanel,但微软的 JavaScript 代码完全是垃圾。有没有人有任何好的策略来加载/更新/刷新 Web 表单的部分而不使用 UpdatePanels?或者有没有人有任何关于使用 UpdatePanels 来解决一些前端代码蹩脚问题的技巧?

更新(澄清)

这是一个示例情况,说明我想要做的更清楚。在靠近页面底部的主页上,我们有一些包含不同内容的选项卡。每个选项卡的内容主体都有针对某些不同用户类型的不同内容。在成千上万的主页访问者中,我们每天可能会点击任何选项卡。尽管有这些数据,我们的经理仍然希望在那里有标签。因为每个选项卡正文中都有很多HTML内容,所以我想在单击选项卡时加载选项卡的内容。解决方案显然是使用ajax;但是,当单击选项卡时,您将 HTML/控件放在哪里以加载 HTML。我可以将每个选项卡的内容放在它自己的 apsx 页面中(例如 /home/tabs1.aspx),但是如果我们愿意的话,我们不能轻易地将内容嵌入到页面中。我可以将内容放在它自己的用户控件中并创建一个 HttpHandler 或加载它的页面,但这会导致在更复杂的页面上查看状态问题。我可以在函数中硬编码 HTML,然后将其设置为文字或在 ajax 请求调用它时在处理程序中返回 HTML。这些解决方案中的每一个都有效。有些比其他的更理想(第三个是可怕的关注点分离,虽然我以前见过)。 UpdatePanel 提供了最好的解决方案,因为它们允许您将内容放在标记的正确部分,而无需单独的文件。我对 UpdatePanel 的问题是它们要求您使用 Microsoft 的 javascript 库。有没有像 UpdatePanel 一样工作但不使用 UpdatePanel 的解决方案?

我正在尝试解决其他几个用例:

  • 页面上的框在加载时包含内容,但每 30 秒更新一次
  • 我只想在用户将鼠标悬停在某个版块上时才加载的大型标头导航菜单
  • 当用户单击链接时,您的表单会显示在灯箱中。 (这可能会导致视图状态问题)

【问题讨论】:

    标签: asp.net ajax updatepanel webforms


    【解决方案1】:

    在某些特殊情况下,您可以使用比 UpdatePanel 更少的请求/响应负载来完成异步页面更新。

    例如,AjaxControlToolkit 提供了几个可以通过非 UpdatePanel 异步回调进行更新的组件。例如,CascadingDropDown 控件扩展器有助于根据另一个下拉列表中的值过滤一个下拉列表的场景。轻量级扩展器没有将整个表单包装在 UpdatePanel 中,而是提供了好处。

    不过,很难提出一揽子方法,因为每个 AJAX 场景可能涉及不同的控件、扩展程序或 JavaScript 库(例如 JQuery)。

    【讨论】:

    • 感谢您的链接。这些控件肯定会帮助我为某些功能重新发明轮子。这些控件虽然对我的特定问题没有帮助。如果有帮助,我对我的问题进行了一些澄清。恐怕没有一揽子方法,每个案例都需要单独处理。
    【解决方案2】:

    JQuery 似乎是最流行的方式... http://docs.jquery.com/Downloading_jQuery

    【讨论】:

    • jQuery 只是一个库,其中包含用于不同浏览器的包装 XHR 对象。它对您如何实际构建和有效负载要更新的页面的内容没有帮助。对于其他 Web 框架(例如 Rails),这种情况相当容易,但由于 Web 窗体使用控件和视图状态,因此很难创建一个通用方法来延迟加载内容或刷新内容而不会导致问题。
    • 啊,我误解了这个问题(我猜读得太快了)。我仍然生活在 WebForms 世界中,但从我所读到的内容看来,您提到的问题似乎是许多人转向 ASP.NET MVC 的原因。
    • @howardr:如果您只对与WebControls 一起使用的解决方案感兴趣(以及提供可在回发中保留的数据的解决方案),您应该编辑您的问题以明确这一点。示例使用场景也将帮助我们回答您。
    • @Jeff:我试着澄清我的帖子。让我知道这是否有助于@o6tech:是的,哦,我多么希望我能切换到 MVC。使用该框架(或 rails、php、任何现代框架),此解决方案要容易得多
    【解决方案3】:

    我想 Jeff Prosise 先生的这篇文章会对你和所有刚接触 AJAX 的人有所帮助(它对我很有帮助):

    UpdatePanel Tips and Tricks

    【讨论】:

      【解决方案4】:

      放弃 Web 表单,切换到 MVC :) 你不会后悔的。 有一点学习曲线,但如果你熟悉经典的 asp,那还不错。

      mvc 与强大的 javascript 库相结合,打造出非常强大(且简单)的动态 Web 应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-30
        • 2011-01-21
        • 2011-01-24
        • 1970-01-01
        • 2020-07-15
        • 2019-03-22
        • 2019-09-03
        相关资源
        最近更新 更多