#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;