【问题标题】:Load a .Net WebControl with JQuery and AJAX使用 JQuery 和 AJAX 加载 .Net WebControl
【发布时间】:2012-05-13 07:56:56
【问题描述】:

我知道这是一个概念性问题,但我希望能够根据用户输入将 .Net WebControls 添加到页面中。我希望这些控件是从服务器生成的 WebControls 和 UserControls。我不确定如何在确保控件完全呈现的同时执行此操作。我知道我可以轻松地从 JQuery 向服务器发出请求,然后毫无问题地将返回的标记添加到页面。有什么方法可以为 WebControl/UserControl 生成完整标记,以通过 AJAX 传递回 JQuery,以便我可以在页面上呈现它?

【问题讨论】:

  • 我假设您正在使用 WebForms。
  • 我不太清楚 WebForms 适用于什么,但我使用的是 System.Web.UI.WebControls 命名空间。
  • 我的意思是 ASP.NET WebForms 与 ASP.NET MVC。这在 MVC 中非常简单。
  • 是的,我正在使用 WebForms

标签: c# jquery .net ajax controls


【解决方案1】:

您需要使用 AJAX 对页面进行异步回调。如果您想从客户端触发此操作,您可以使用 __doPostBack 并在代码隐藏中覆盖 RaisePostBackEvent 方法。

<script type="text/javascript">
    loadControls = function(input){
        __doPostBack(input.id, input.value);
    }
</script>
<asp:UpdatePanel ID="pnlLoadControls" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="txtInput" runat="server" onkeyup="loadControls(this)" />
        <asp:PlaceHolder ID="plcLoadedControls" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

然后在代码隐藏中:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    base.RaisePostBackEvent(source, eventArgument);
    if (source == txtInput)
    {
        plcLoadedControls.Controls.Add(new LiteralControl("Hello World!"));
    }
}

【讨论】:

  • 我希望只使用 javascript/jquery 来执行此操作并向另一个页面发出请求。我担心页面每次都经历完整的生命周期,我宁愿在脚本中注入控件。
  • 如果你想用 jQuery 来做,你可以发出 AJAX 请求并将内容加载到iframe。为了保持精简和高效,请考虑将请求发送到HttpHandler 或其他地址。
  • iframe 很可怕,因为它们在 iPad 上显示时不允许滚动。在这些控件之一中加载的任何自定义内容都无法扩展到容器边界之外。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2011-01-21
  • 1970-01-01
  • 2011-09-15
相关资源
最近更新 更多