none
使用SlideShowExtender控件显示图片,图片是存在数据库的,不是存的地址,我想知道在服务中的方法怎么写!!! RRS feed

  • 问题

  • 我使用SlideShowExtender展示图片,webservices里面有个方法,
    [WebMethod]
        public Slide[] GetPhoto(string contextKey)
        {   ///检测参数是否为空
            if (string.IsNullOrEmpty(contextKey) == true) return null;
            ///获取参数的值,并转换为分类的ID值
            int id = -1;
            if (Int32.TryParse(contextKey, out id) == false)
            {
                return null;
            }
            List<PhotoBase> list = AllDAL.getAllPhotoByTypeId(id);
            Slide[] slides = new Slide[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                AjaxControlToolkit.Slide slide = new AjaxControlToolkit.Slide(Server.MapPath("~/Front/ealbum/ImageOut.aspx")+"?id=" + list[i].PhotoId, list[i].PhotoTitle, list[i].PhotoContent);
               //Slide slide = new Slide(Server.MapPath("~/Front/ealbum/images/45.JPG"), list[i].PhotoTitle, list[i].PhotoContent);
    
                slides[i] = slide;
            }
            return slides; 
    ImageOut.aspx页面是读取图片的,测试下ImageOut.aspx页面取图片没有问题,经过调试,可以取到路径是
    "E:\\Y2Asp项目\\后加\\WebUI\\Front\\ealbum\\ImageOut.aspx?id=5"路径的节点也没有问题,
    就是现实的时候不出效果,上面那个方法若是用注释的那个是可以显示的,我想问一下 :是不是从数据库取图片的路径不对呀,
    怎么办呢??


    谢谢老师!!
    2009年6月6日 2:17

答案

  • 你好,你的路径写错了!

    E:\\Y2Asp项目\\后加\\WebUI\\Front\\ealbum\\ImageOut.aspx?id=5 没有这样格式的路径。

    还有,设计思路也有错误,

    Slide slide = new Slide() 的第一个参数是要求输入图片的路径,这个在你的第二个实现方法中,可以顺利运行。

    但是,在你的第一实现方法中,输入的并不是图片的路径,而是生成图片的路径。你想一下,你把生成图片的路径作为字符串传进去,程序肯定不会去

    先生成图片,对吧!所以,你要先执行这个生成图片的方法,固化到文件中,Slide slide = new Slide()不会读取内存中的图片的,固化后,有地址

    了,再作为Slide slide = new Slide()的参数传入就可以了。

    谢谢!
    邹俊才
    2009年6月7日 9:35
    版主
  • 你好这是因为
    Server.MapPath("~/Front/ealbum/ImageOut.aspx")+"?id=" + list[i].PhotoId
    这里的Server.MapPath传入的不是有效的虚拟路径 因为的参数中带了参数id
    Server.MapPath 是要得到服务器上的文件的物理路径
    比如你用 Server.MapPath("~/Default/3.aspx")
    而你的根目录在E:\wwwroot
    那么这里返回E:\wwwroot\Default\3.aspx
    还有就是你是要把图片让客户端显示那么用物理路径的话在客户端是要显示客户端的这些路径的图片,一般情况客户端是没有的 所以也肯定显示不出来的 在你自己的电脑上可能可以显示出来,如果你的网站放在自己电脑上的
    

    努力着就不会放弃!.net技术交流群 33083877http://hi.baidu.com/1987raymond
    2009年6月6日 2:37
    版主

全部回复

  • 你好这是因为
    Server.MapPath("~/Front/ealbum/ImageOut.aspx")+"?id=" + list[i].PhotoId
    这里的Server.MapPath传入的不是有效的虚拟路径 因为的参数中带了参数id
    Server.MapPath 是要得到服务器上的文件的物理路径
    比如你用 Server.MapPath("~/Default/3.aspx")
    而你的根目录在E:\wwwroot
    那么这里返回E:\wwwroot\Default\3.aspx
    还有就是你是要把图片让客户端显示那么用物理路径的话在客户端是要显示客户端的这些路径的图片,一般情况客户端是没有的 所以也肯定显示不出来的 在你自己的电脑上可能可以显示出来,如果你的网站放在自己电脑上的
    

    努力着就不会放弃!.net技术交流群 33083877http://hi.baidu.com/1987raymond
    2009年6月6日 2:37
    版主
  • 谢谢您的帮忙,可是具体我该怎么弄呢,去掉Server.MapPath也是不出的,我是新手,希望解释的详细点~~,谢谢
    2009年6月6日 11:13
  • 你好,你的路径写错了!

    E:\\Y2Asp项目\\后加\\WebUI\\Front\\ealbum\\ImageOut.aspx?id=5 没有这样格式的路径。

    还有,设计思路也有错误,

    Slide slide = new Slide() 的第一个参数是要求输入图片的路径,这个在你的第二个实现方法中,可以顺利运行。

    但是,在你的第一实现方法中,输入的并不是图片的路径,而是生成图片的路径。你想一下,你把生成图片的路径作为字符串传进去,程序肯定不会去

    先生成图片,对吧!所以,你要先执行这个生成图片的方法,固化到文件中,Slide slide = new Slide()不会读取内存中的图片的,固化后,有地址

    了,再作为Slide slide = new Slide()的参数传入就可以了。

    谢谢!
    邹俊才
    2009年6月7日 9:35
    版主