使用$ find找不到UpdatePanel中的控件

时间:2014-12-02 15:11:01

标签: asp.net telerik updatepanel

我有一个复杂的页面,但我创建了一个简单的ASP.NET页面。我有一个Telerik RadAsyncUpload控件和一个UpdatePanel内的按钮,如下所示:

<asp:UpdatePanel ID="_updatePanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
    ...
    <telerik:RadAsyncUpload ID="fileUpload" runat="server" MaxFileInputsCount="1"  OnClientFilesSelected="fileUpload_ClientFilesSelected" /><br />         

    <asp:Button ID="_saveNewFileButton" runat="server" OnClick="_saveNewFileButton_Click"
    Text="Save"/>

    </ContentTemplate>
</asp:UpdatePanel>

当选择文件时,我想禁用_saveNewFileButton并将文本更改为&#34;请等待附件上传...&#34;但我似乎无法抓住javascript中的按钮引用:

var FilesUpdateInterval = null;

 //Handles client side FilesSelected event for _newFileUploadButton.
 function fileUpload_ClientFilesSelected(sender, args) {
     //disable the click event for submit button during upload
     var submitButton = $find('<%= _saveNewFileButton.ClientID %>');
     submitButton.set_text('Please Wait for Attachment Upload...')
     submitButton.set_readOnly(true);
     if (FilesUpdateInterval == null) {
         FilesUpdateInterval = setInterval(function () { FileCheckForUploadCompletion(); }, 500);
     }
 }

我收到submitButton是null错误。我尝试将此javascript代码放在updatepanel之外,并在ContentTemplate内部使用相同的结果。显然,无论我做什么都是错的。如何在javascript中获取updatepanel中的控件?

编辑:我发现$ find仅适用于telerik控件。所以,我必须使用document.getElementById函数或者像Steve指定的那样使用JQuery。另外,我必须使用RegisterClientScriptBlock。我将用史蒂夫的建议进行测试,然后接受答案。

2 个答案:

答案 0 :(得分:1)

在ASP.Net中使用jQuery和vb,我已经做了类似的事情,虽然它不是那么漂亮但效果很好。我所拥有的[Whatever]是一个并不总是拥有控件的FormView。此外,我没有使用按钮,但我认为这是更改按钮文本的语法。不管怎样,它可能会给你一些想法:

$('#<%=GetButtonClientID("_saveNewFileButton")%>').attr('value', 'Please Wait for Attachment Upload...'); 

然后我有这样的功能:

Public Function GetButtonClientID(ByVal argFieldName As String) As String

    Dim tmpID As String = "0"

    Dim tmpButton As Button = [Whatever].FindControl(argFieldName)
    If Not tmpButton Is Nothing Then Return tmpButton.ClientID.ToString Else Return "0"


End Function

答案 1 :(得分:1)

简短版本 - 使用$ get()或document.getElementById(),因为常规HTML元素不是IScriptControls,所以$ find()不会给你任何东西,而且他们没有富客户端API你正在尝试使用。

例如

            var submitButton = $get('<%= _saveNewFileButton.ClientID %>');
            submitButton.setAttribute("value", "Please Wait for Attachment Upload...");

选项2 - 使用RadButton。