关于第一种方法:
  可以在服务器端设置图片文件的过期时间。如果是IIS,在Internet Service Manager中选中相应的虚拟目录和图片文件(可以先生成一个同名的图片文件),打开属性设置,在HTTP Header设置页上有过期选项,选择立即过期。
  另外也可以选择每次生成不同的文件名,比如使用Guid作为文件名,这样浏览器肯定每次都会从服务器读去图片。(不过要记得清硬盘空间)。关于第二种方法:
  我个人觉得是比较好的方法,因为避免了读写硬盘,效率应该比较高才对(这也是多数动态图片生成采用的方法)。但是由于浏览器只支持单一的Content-Type,所以只能选择使用两个aspx页面的方式。其实没有必要使用IFRAME,用IMG应该就可以了(在生成HTML的页面里加上<img src="http://myserver/myimagegen.aspx?a=123" />)。
 至于数据传递和读数据库的问题,我觉得可以通过改变程序的结构来解决。比如说:a)把数据暂存在session中,返回给客户一个用于查找访问数据的key。b)相对于网络数据传输,多读一次数据库也不会是很大的开销。

解决方案 »

  1.   

    关于第一种方法:
      可以在服务器端设置图片文件的过期时间。如果是IIS,在Internet Service Manager中选中相应的虚拟目录和图片文件(可以先生成一个同名的图片文件),打开属性设置,在HTTP Header设置页上有过期选项,选择立即过期。
      另外也可以选择每次生成不同的文件名,比如使用Guid作为文件名,这样浏览器肯定每次都会从服务器读去图片。(不过要记得清硬盘空间)。关于第二种方法:
      我个人觉得是比较好的方法,因为避免了读写硬盘,效率应该比较高才对(这也是多数动态图片生成采用的方法)。但是由于浏览器只支持单一的Content-Type,所以只能选择使用两个aspx页面的方式。其实没有必要使用IFRAME,用IMG应该就可以了(在生成HTML的页面里加上<img src="http://myserver/myimagegen.aspx?a=123" />)。
     至于数据传递和读数据库的问题,我觉得可以通过改变程序的结构来解决。比如说:a)把数据暂存在session中,返回给客户一个用于查找访问数据的key。b)相对于网络数据传输,多读一次数据库也不会是很大的开销。
      

  2.   

    谢谢qqchen79(知秋一叶)我现在遇到一个这样的问题,我放一个第三方ACTIVEX控件到ASPX里,想在SUBMIT 的处理函数使用控件的属性,也就是说在.CS文件里用到我的控件的属性却做不到,该ACTIVEX控件是VC6编写的,控件的置放方式是<OBJECT uuid=...>方式
      

  3.   

    <OBJECT>是在客户端有IE来解析/激活的,而asp.net的代码运行在server端,这时候ActiveX对象还没有创建,当然不能用了。一种办法是用asp.net生成客户端运行的javascript,然后在script里面访问activeX控件。
      

  4.   

    是不是无法解决这个矛盾?我想想InputBox,CombBox之类的也是组件啊,根据我觉得应该能把我的控件用同样的方法来实现,就象在VC中可以从OCX中导入一样,如果说先要在客户端注册的话也可以啊
      

  5.   

    InputBox,CombBox之类的也是组件没错,但是在Server端的“组件”并不管理它们的显示和消息等等,而是简单的输出HTML格式的文本(<input type="..." ...>)。
    所以,在client端详细控制显示和交互的还是浏览器。
    在你的问题里,我觉得除了客户端script之外没有什么好的方法。
      

  6.   

    有道理,但是我想假如服务器和浏览器都注册了我的ACTIVEX控件
    然后我在ASPX中使用 #using "myactivex.dll" 就可以用了,不知道我的猜想正确不
      

  7.   

    在aspx页面可以用没错。需要先用tlbimp生成一个包装assembly。
    这个server端的控件还是没办法直接和客户交互。
    所以,一般服务器端控件就只是数据处理,没有界面的。
    在ASP里面,相当于Server.CreateObject...
      

  8.   

    这样说来
    。NET其实不能实现好多ASP中的功能了