巧用中继隐藏页面RelayPage

中继隐藏页面RelayPage是不会在浏览器中显示出来的,它存在的目的是为了辅助其它页面完成特定的功能,而如果不使用中继隐藏页面,那么这些特定功能的实现可能是很繁琐或拙劣的。下面通过两个例子来看看。

 

(1)         显示数据库中的图片

Image控件只能通过其ImageUrl来指定显示的图片,如果图片存放于数据库中,就不好处理了,我们可以把图片的数据读到内存中,但是Image控件不能绑定到内存数据和流,那么如何解决了?有人说可以先把图片数据在本地保存为一个临时文件,然后让Image控件的ImageUrl指向此文件,当然可以这么做,可是这种实现太不优雅,而且在图片众多的时候,需要频繁的与硬盘交互,而且对这些临时图片文件的管理也成问题。

更好的解决办法是,使用一个中继页面,在该页面的Page_Load方法中把图片数据从数据库读出,然后保存到Response.OutputStream到中。源码如下:

private   void  Page_Load( object  sender, System.EventArgs e)
        
{
            
string thePicID = this.Request.QueryString["ID"] ;
            BinaryInformationDetail picInfo 
= (BinaryInformationDetail)DataEntrance.GetAObjectEspecial(typeof(BinaryInformationDetail) ,thePicID) ;

            MemoryStream stream 
= new MemoryStream(picInfo.Data)  ;
            Bitmap bmp
=new Bitmap(stream);
            bmp.Save(
this.Response.OutputStream ,System.Drawing.Imaging.ImageFormat.Jpeg) ;            
        }

 

(2)         点击一个HyperLink需要输出一个脚本在客户端执行,由于HyperLink没有点击事件触发,只有一个url链接,所以无法向Response写入脚本。替代的方法是使用RelayPage,让HyperLinkurl指向一个RelayPage,而在RelayPagePage_Load方法中向Response输出脚本。

private   void  Page_Load( object  sender, System.EventArgs e)
        
{
            PMS.Common.SessionContentInterPages sessionPages 
= new PMS.Common.SessionContentInterPages(this.Session) ;
            sessionPages.MainFormRefreshInformation.RefreshType 
= RightFrameRefreshType.ForPic ;
            sessionPages.MainFormRefreshInformation.theTargetID 
= this.Request.QueryString["ID"].ToString() ;
            
            
//向Response中写入脚本!
            RefreshMapHelper.RefreshMap(this.Response ,MapRefreshType.ForPicLocation ,this.Request.QueryString["ID"].ToString() ,false) ;
            EnterpriseServerBase.XWeb.PublicWebFunction.RefreshFrameInAncestorPage(
this.Response ,"MainForm" ,"framedown" , "PicManage/PicDetailForm.aspx",true) ;
            
        }

 

一般只需要使用中继隐藏页面的Page_Load方法就可以了。需要注意,有的中继隐藏页面需要在Page_Load执行完后就被关闭,如上面的示例2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值