当前台的JavaScript函数GetFile被执行时,为什么不能下载文件,浏览器都不动一下,代码如下:
前台的JavaScript
  function GetFile() {
  var s ="<%=DownFile('d:\001.file')%>" }后台代码
public string DownFile(string fileName)
        {
             FileInfo fi = new FileInfo(fileName);
             FileStream fs = fi.OpenRead();
            byte[] FileArray = new byte[(int)fs.Length];
             fs.Read(FileArray, 0, FileArray.Length);
             fs.Close();             Response.Buffer = true;
             Response.Clear();
             //Response.ContentType = contentType;
             Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
             Response.BinaryWrite(FileArray);
             Response.Flush();
             Response.End();
             return string.Empty;
         }

解决方案 »

  1.   

    获取返回值可以这样使用
    否则AJAX
    document.getElementById("button1").click();
      

  2.   

    document.getElementById("btnUpload").click();
    点击btnUpload生成个事件,事件里写你要执行的后台代码
    比如:上传控件就用个上传控件ID.onchange=function(){
    document.getElementById("btnUpload").click();}
      

  3.   

    除了调用Button.Click方法以外,还有其它的什么办法可以让程序正确执行吗?
      

  4.   

    主要是因为我要传递一个参数给后台,而Button.Click没办法传参数
      

  5.   


    那个是asp.net后台执行的代码。你在浏览器上打印html源代码看看,你贴的跟真正“前台”的html代码一样吗?什么叫做“前台”代码?我想只要面试asp.net程序员时只要有人这么一说,就大概是该在面试结果的“淘汰”一栏上画上钩了。
      

  6.   

    asp.net是输出html+javascript的工具,它永远也不在浏览器上执行。对于你写的代码,asp.net只是把它当作一堆胡乱写的字符串,封装在Literal控件中,然后就更其它服务器控件一样地参与运算,最终输出html到客户端。因此,你在给自己解答这个问题时,当然应该了解客户端的html,而不是aspx上的html。
      

  7.   

    赋值之外,DownFile后台方法不也成功的调用了吗?
    DownFile后台方法就是让客户端下载一个文件呀,怎么没反映呢?
      

  8.   

    看样子只有用Ajax了,除了这个还有其它办法没有呀?
      

  9.   

    使用Ajax报错呀,大家看看我错在哪里呀?
    1. web.config中已经加入下面的引用
    <httpHandlers>
                <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/> 
            </httpHandlers>2.cs文件中这样写的
    namespace WebApplication2
    {
        public partial class TestOpenFile : System.Web.UI.Page
        { 
          protected void Page_Load(object sender, EventArgs e)
            {
                AjaxPro.Utility.RegisterTypeForAjax(typeof(TestOpenFile));  //注册Ajax
                .....
            }
         [AjaxPro.AjaxMethod()]
            public string DownFile(string AFileName)
            { ...... }3.前台JavaScript
      function GetFile(values) {
        var s = WebApplication2.TestOpenFile.DownFile(values.toString()); //运行时这里报错:对象不支持此属性或方法
      

  10.   

    JavaScript难道不是在客户端的浏览器上执行?不想和你争,你还较劲了
      

  11.   

    用Ajax,给你一个链接
    http://blog.163.com/mercury___851217/blog/static/49005854200962691910687/
      

  12.   

    我按你们的意见用Ajax了,但是不知道哪里出错大家看看我错在哪里呀?
    1. web.config中已经加入下面的引用
    <httpHandlers>
      <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>  
      </httpHandlers>2.cs文件中这样写的
    namespace WebApplication2
    {
      public partial class TestOpenFile : System.Web.UI.Page
      {  
      protected void Page_Load(object sender, EventArgs e)
      {
      AjaxPro.Utility.RegisterTypeForAjax(typeof(TestOpenFile)); //注册Ajax
      .....
      }
      [AjaxPro.AjaxMethod()]
      public string DownFile(string AFileName)
      { ...... }3.前台JavaScript
      function GetFile(values) {
      var s = WebApplication2.TestOpenFile.DownFile(values.toString()); //运行时这里报错:对象不支持此属性或方法
      

  13.   

    我发现很多人都把<%=%>当作是前台调用后台的方法,其实这种写法是混淆了前台和后台,<%=%>是在后台渲染页面时替换的
      

  14.   

    文件传输不要用ajax,ajax不支持二进制文件,用ajax只是简单问题复杂化,直接用一个链接或者用location.href指向
      

  15.   

    Ricercar  
      我是上目的是: 根据前台传来的一个参数,后台读取一个文件,让浏览器,下载或者打开它.这要用什么方法呢?
      

  16.   


    非常简单,写一个aspx页或者ashx处理程序,处理文件下载,客户端用get方式调用file.aspx?file=xxxxx
      

  17.   

    我的文件是存储在数据库中的呀,客户端用get没办法读出来的. 我都是用后台读取出来的
      

  18.   

    用两个网页,1.aspx和2.aspx.
    其中1.aspx为用户看见的页面,2.aspx为处理文件下载的页面。
    用户在1.aspx输入参数,通过ajax的get方法向2.aspx发送请求。
      

  19.   

    huiyuan659
      当前页面就没办法实现吗?
      

  20.   

    用最笨的方法来解决该问题了
    1.放了一个Hidden,Button
    2.JavaScript,修改Hidden的值,并调用Button的Click()方法
    3.Click执行时读取Hidden的值,并根据该值读取文件,放发给IE
      

  21.   

    缺点就是:Button没办法隐藏起来太难看了