You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过XML+XSLT生成的Telerik上传控件OnFileUploaded事件不触发如何解决?

动态加载RadAsyncUpload事件不触发的解决方案

核心原因

  • 通过ParseControl解析字符串生成的控件,ASP.NET不会自动将标记中OnFileUploaded属性关联到后台的事件处理方法,只有静态声明在页面的控件才会在编译阶段完成自动绑定。
  • PreInit阶段母版页的ContentPlaceHolder还未完成初始化,此时往内容容器中添加的控件无法正确挂载到页面控件树,错过后续的事件路由流程。

解决步骤

  1. 调整控件加载时机到Page_Init阶段
    这个阶段母版页的内容占位符已经初始化完成,动态添加的控件可以正确加入控件树,赶上视图状态加载、事件路由的生命周期节点。
  2. 手动绑定服务端事件
    解析完XSLT输出的控件后,手动查找RadAsyncUpload控件并绑定事件,示例代码如下:
// 原有逻辑生成控件
Control parsedControl = master.ParseControl(ApplyXslt(xml, xsl_trans, xsl_args));
// 手动查找上传控件并绑定事件
var asyncUpload = parsedControl.FindControl("AsyncUpload1") as RadAsyncUpload;
if (asyncUpload != null)
{
    asyncUpload.FileUploaded += AsyncUpload1_FileUploaded;
}
// 再添加到容器
tContent.Controls.Add(parsedControl);
  1. 保证每次回发都重新添加动态控件
    不要把加载动态控件的逻辑包裹在if(!IsPostBack)判断里,ASP.NET的控件树每次回发都会重建,必须每次回发都重新生成并添加动态控件,事件才能找到对应的触发目标。
  2. 保持控件ID固定
    确保XSLT每次生成的RadAsyncUpload控件ID都是固定的AsyncUpload1,不要动态生成随机ID,ASP.NET依靠控件ID匹配路由回发事件。

内容的提问来源于stack exchange,提问作者Jack Thor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:24:07