【问题标题】:How to find a client side element in an update panel from code behind?如何从后面的代码中找到更新面板中的客户端元素?
【发布时间】:2013-09-05 13:03:08
【问题描述】:

在 asp.net 中开发用户控件时,我发现很难 查找位于更新面板中的 html 客户端元素。

.ascx 端包含以下内容:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
      <div id="<%=ClientID%>_MyElement">
      </div>
   </ContentTemplate>
</asp:UpdatePanel>

我需要在我的代码隐藏中获取对那个 div 的引用。

protected void Page_Load(object sender, EventArgs e)
{
    if(IsPostBack)
    {
        //var c = UpdatePanel1.FindControl("<%=ClientID%>_MyElement"); //<-not working.
        //:
        //get some values from c
        //:
    }
}

现在,由于还有 Ajax (JavaScript) 操纵该 div:

  1. 我无法为该 div 设置 runat="server"。
  2. 我必须使用 _MyElement 作为 id'ing 约定。

所以假设 div 将保持原样 - 有没有办法获取参考 从后面的代码到它?

【问题讨论】:

    标签: c# javascript html asp.net ajax


    【解决方案1】:

    试试这个:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
       <ContentTemplate>
          <div id="MyElement" runat="server">
          </div>
       </ContentTemplate>
    </asp:UpdatePanel>
    

    在代码后面

    protected void Page_Load(object sender, EventArgs e)
    {
        if(IsPostBack)
        {
            var c = MyElement;
    
        }
    }
    

    在 JavaScript 中

    var MyElement=document.getElementById('<%= MyElement.ClientID');
    

    【讨论】:

    • 好吧.. 我真的很想将此标记为答案,但不.. 这还不够好 - 当我设置 runat="server" 时,一切都变得松散,回发事件会覆盖 ajax 函数操纵div。所以谢谢。但我真的需要我的问题中指定的其他方式。
    【解决方案2】:

    尝试从您的UpdatePanel 访问您的div。示例:var div = UpdatePanel1.Controls[0];

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 2014-08-20
      • 1970-01-01
      相关资源
      最近更新 更多