日期:2014-05-17  浏览次数:20502 次

能不能实现用linkbutton实现和hyperlink一样的连接效果(页面自动打开,文件自动下载),点击连接存储下载记录信息?
我想实现用linkbutton实现和hyperlink一样的连接效果(页面自动打开,文件自动下载),点击连接存储下载记录信息,并实现连接效果。
我用了两种方法,效果都不好:
1)用linkbutton,在click事件中加了脚本代码:
存储数据;
Response.Write("<script language=javascript>window.open('" + ColumnValue[4] + "','_blank')</script>");

可在xp上使用有问题,我查了一下原因,是xp本身问题:
不能使用 Window.Open 方法打开或下载一个基于 Windows XP Service Pack 2 的计算机上的一个文件
所以要避开这个方法

2)用hyperlink转到数据处理页,存储数据,用response.redirect("test.asp");转向链接页面,但也有问题,我的链接页面数据是从别人的数据库以xml形式得到的,如果只传ID,需要重新查找数据,运行很慢;如果所有数据都传过来,链接地址串又会超常,而且有非法字符。


请问有什么好办法能够一点连接,能够存储点击记录的所有数据,又能很快地转向链接页面?


------解决方案--------------------
用流的方式读取文件,再写出来
用ASP写的我没有类似代码.ASP.NET的类似这样
C# code

  System.IO.FileInfo file = new System.IO.FileInfo(fileName);
            if (file.Exists)
            {
                System.IO.FileStream fs = null;
                fs = System.IO.File.Open(fileName, System.IO.FileMode.Open);
                byte[] btFile = new byte[fs.Length];
                fs.Read(btFile, 0, Convert.ToInt32(fs.Length));
                fs.Close();

                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                System.Web.HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
                System.Web.HttpContext.Current.Response.ContentType = "audio/mpeg3";
                System.Web.HttpContext.Current.Response.BinaryWrite(btFile);
            }
            else
            {
                System.Web.HttpContext.Current.Response.Write("This file does not exist.");
            }

------解决方案--------------------
2)用hyperlink转到数据处理页,存储数据,用response.redirect("test.asp");转向链接页面,但也有问题,我的链接页面数据是从别人的数据库以xml形式得到的,如果只传ID,需要重新查找数据,运行很慢;如果所有数据都传过来,链接地址串又会超常,而且有非法字符。 

可以考虑用session传值
数据不是很大的话也可以用cookie
------解决方案--------------------
HTML code

<form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
            <Services>
                <asp:ServiceReference Path="WebServiceFoundation.asmx" InlineScript="true" />
            </Services>
        </asp:ScriptManager>
        
        <input type="button" value="Get Random" onclick="getRandom()" />
        <input type="button" value="Get Range Random" onclick="getRandom(0, 9)" />
        
        <script language="javascript" type="text/javascript">
            function getRandom(minValue, maxValue)
            {
                if (arguments.length != 2)
                {
                    Sample.WebServiceFoundation.GetRandom(getRandomSucceeded);
                }
                else
                {
                    Sample.WebServiceFoundation.GetRangeRandom(minValue, maxValue, getRandomSucceeded);
                }
            }
            
            function getRandomSucceeded(result)
            {
                alert(result);
            }
        </script>
    </form>