Обработчик событий не инициализируется при инициализации

#asp.net #telerik #asp.net-webcontrol

Вопрос:

У меня есть страница aspx и код позади. Содержимое страницы динамически создается с помощью XML и XSLT tContent.Controls.Add(master.ParseControl(ApplyXslt(xml, xsl_trans, xsl_args))); . Где tcontrol находится контроль <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> . В XSLT у меня есть пульт дистанционного управления

  <telerik:RadAsyncUpload RenderMode="Lightweight" ID="AsyncUpload1" runat="server" 
                                OnClientFilesUploaded="OnClientFilesUploaded" OnFileUploaded="AsyncUpload1_FileUploaded"
                                MaxFileSize="2097152" AllowedFileExtensions="jpg,png,gif,bmp"
                                AutoAddFileInputs="false" Localization-Select="Upload Image" />
        <asp:Label ID="Label1" Text="*Size limit: 2MB" runat="server" Style="font-size: 10px;"></asp:Label>
 

у элемента управления есть вызываемое событие onFileUploaded , и я установил его так OnFileUploaded="AsyncUpload1_FileUploaded" . В моем коде позади меня есть функция, определенная следующим образом

 protected void AsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e)
{
    string newfilename = "logo."   e.File.GetExtension();
    string path = "/customer/"   MiscFunctions.currentCustXml "/"  newfilename;
    e.File.SaveAs(path);
}
 

Я знаю, что onFileUploaded событие происходит на обратной стороне поста. Но по какой-то причине это не называется. Но когда я вырезаю и вставляю элемент управления непосредственно в содержимое <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> , обработчик событий запускается правильно. Сначала я подумал, что это связано с тем, что сгенерированный контент добавлялся после инициализации элементов управления, созданный контент был добавлен при Page_Load вызове, поэтому элемент управления telerik инициализирован неправильно. Поэтому я затем перемещаю код в Page_Preinit , и событие все еще не вызывается. Есть ли что-то, чего мне не хватает? Или то, что я делаю, невозможно, поскольку элементы управления инициализируются до жизненного цикла страницы?

Ответ №1:

Использование ParseControl с уже определенным Event-Handlers в вашей разметке не будет работать.

Вам нужно проанализировать/добавить элемент управления, а затем добавить обработку событий в свой код следующим образом:

 tContent.Controls.Add(master.ParseControl(ApplyXslt(xml, xsl_trans, xsl_args)));
RadAsyncUpload uploadControl = (RadAsyncUpload)tContent.FindControl("AsyncUpload1");
uploadControl.FileUploaded  = AsyncUpload1_FileUploaded;