技术开发 频道

让UpdatePanel支持文件上传(2):服务器端组件

 这段实现并不复杂。如果Request Body中的“__AjaxFileUploading__”的值为“__IsInAjaxFileUploading__”,我们就会使用反射修改ScirptManager控件中的私有变量“_isInAsyncPostBack”。此后,我们使用了自己定义的Page_Error方法来监听页面的Error事件,当页面的Error事件被触发时,我们定义的新方法就会将能够正确解析的内容发送给客户端端。

  自然,AjaxFileUploadHelper也需要将程序集中内嵌的脚本文件注册到页面中。我为组件添加了一个开关,可以让用户开发人员使用编程的方式来打开/关闭对于AJAX文件上传的支持。这部分实现更为简单:

注册脚本文件
public bool SupportAjaxUpload { get { return _SupportAjaxUpload; } set { _SupportAjaxUpload = value; } } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (this.isInAjaxUploading) { this.Page.SetRenderMethodDelegate(new RenderMethod(this.RenderPageCallback)); } if (this.Page.IsPostBack || !this.SupportAjaxUpload) return; if (!ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack) { ScriptReference script = new ScriptReference( "Jeffz.Web.AjaxFileUploadHelper.js", this.GetType().Assembly.FullName); ScriptManager.GetCurrent(this.Page).Scripts.Add(script); } }


  如果用户希望关闭对于AJAX文件上传的支持,他可以使用下面的代码将页面上AjaxFileUploadHelper控件的SupportAjaxUpload属性关闭:

关闭AJAX上传支持
AjaxFileUploadHelper.GetCurrent(this.Page).SupportAjaxUpload = false;


  等一下,这是什么?我是指在“OnPreRender”方法中的代码:

截获输出方式 if (this.isInAjaxUploading) { this.Page.SetRenderMethodDelegate(new RenderMethod(this.RenderPageCallback)); }


  

0
相关文章