繁体   English   中英

未定义更新面板内部动态添加的用户控件内部的Javascript函数

[英]Javascript Function Inside Dynamically Added User Control Inside Update Panel Is Not Defined

我有一个ASP.NET Webforms页面,该页面在很大程度上是根据从数据库接收的信息动态生成的。 控件被注入到UpdatePanel中。 在大多数情况下,一切正常,除了一个控件包含一个JavaScript函数,该函数在用户单击控件内部的按钮时执行。 该控件在测试页面上可以正常运行,但是当在此动态创建的页面中使用该控件时,单击该按钮将返回JS控制台错误,表明该功能“未定义”,即使通过浏览器进行的页面源检查显示该功能存在。 将该控件注入页面后,尝试通过chrome开发者工具控制台执行该功能会出现相同的错误。 如何使该函数可以执行?

在较高的级别/伪代码中,它看起来如下所示:

<Page>
...
     <DynamicWizardControl>
          <UpdatePanel>
               <!--dyanamically injected stuff-->
               <WizardDocumentSubmissionControl>
                    <DocumentSubmissionControl ID="Attachments" runat="server">
                         <asp:Textbox ID='txtFile' runat='server'></asp:Textbox>
                         <asp:Button ID='btnAdd' runat='server' Text='Add File' />
                         <script>
                              function submitFile<%=btnAdd.ClientID%>() {
                                   alert($('#<%=txtFile.ClientID%>').val());
                              }
                         </script>
                    </DocumentSubmissionControl>
               </WizardDocumentSubmissionControl>
               <!--End Dynamically Injected Stuff-->
          </UpdatePanel>
     </DynamicWizardControl>
</Page>

WizardDocumentSubmissionControl的背后代码

Page_Load
Attachments.JSSubmitButton.OnClientClick = Attachments.SubmitFileJSFunctionName

DocumentSubmissionControl的背后代码

Public ReadOnly Property SubmitFileJSFunctionName As String
    Get
        Return "submitFile" & btnAdd.ClientID
    End Get
End Property
Public ReadOnly Property JSSubmitButton As Button
    Get
        Return btnAddJS
    End Get
End Property

因此,似乎动态注入的控件未将javascript注册到DOM。 我使用ScriptManager.RegisterClientScriptBlock来注册整个javascript函数,从而使它正常工作,这是我希望避免的事情,因为我觉得JS应该位于控件的HTML部分内,而不是位于后面的代码内。 如果有人知道更好的方法,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM