【问题标题】:How do I get contents of UserControl from server using Jquery Ajax?如何使用 Jquery Ajax 从服务器获取 UserControl 的内容?
【发布时间】:2012-04-12 16:05:40
【问题描述】:

使用 UpdatePanel 的 Asp.Net 的 ajax 实现真的很慢,有经验的人知道整个 ViewState 被发送到服务器,即使我们只对部分回发感兴趣。所以我开始使用 Jquery,但我不知道如何从 Jauery 向服务器发出请求并在输出中获取 UserControl 的 HTML? UserControl 又可能有一些控件,如文本框等。

简而言之,我想要一些 Asp.Net MVC 的功能,它使用RenderPartial

【问题讨论】:

  • 您是否在回发时从视图状态中读取值?您是否知道,如果您想在回发时访问它,在页面加载后使用 jQuery 呈现控件会导致控件不在视图状态中?
  • 好的。谢谢我没有意识到这一点。那么你有什么建议呢?有什么办法可以加快 Ajax 的速度?
  • 更新面板的回发和渲染有多慢?在巨大的页面上,我仍然可以获得很好的响应能力(<.5 ajax>
  • 对我来说,一个简单的任务也至少需要 4 秒。 UserControl 有国家下拉菜单和州下拉菜单。在选择更改国家下拉列表时,它会请求获取该国家的状态。除此之外,它只有几个文本框。当托管在服务器上时,在国家和州都缓存在内存中之后,至少需要 4 秒。 mafue 建议的方法是完美的,尽管它在这种情况下不起作用。

标签: c# jquery asp.net .net


【解决方案1】:

Page 的上下文中,您可以加载控件并呈现其输出。

Control myControl = Page.LoadControl("myControl.ascx");
myControl.RenderControl(System.Web.UI.HtmlTextWriter);

但这只是获取控件将输出到页面的 html。如果您的控件没有更多事件并且只是在加载时执行某些操作,这很好,但如果您想从它回发,那么这将不起作用(如 cmets 中所述)。

【讨论】:

    【解决方案2】:

    根据我的经验,有时尝试直接调用用户控件很痛苦。

    我有时将我的 userControl 放在空白页中,然后简单地执行 $.get( 因此,对于每个 userControl,我必须制作一个专用的空白页...

    其他时候,userControl 已经嵌入到已命名 div 容器内的现有页面中。然后我在页面上调用 $.load( ,以容器 div 为目标。 在这种情况下,我不必制作页面,但我浪费了带宽并丢失了脚本和样式标签(jQuery 从 v1.4 开始清理它们)

    【讨论】:

    • 请看 mafue 的回答。它是正确的。制作通过 Ajax 为用户控件提供服务的方法(WebMethods 或静态页面方法)比制作空页面更好。
    • 通常,控件设计为遵循整个页面生命周期,包括参数、绑定和预渲染。在这种情况下,尝试 mafue 的答案是我第一次谈论的痛苦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2014-05-20
    • 1970-01-01
    • 2013-12-14
    • 2012-06-14
    相关资源
    最近更新 更多