########关于document对像未指明的错误##########
主页面是用IFRAME的,有top,left,main三个框架
功能页在main中,问题是:在功能页中有一个导出excel功能,方法是
response.AppendHeader....
response.Write(.....
response.End();
这样,会弹出一个保存的窗口
当保存完后,在main中的js脚本,所有使用到document对像的都会出现“未指明的错误”,
包括验证控件的js也会报错
如果不使用框架,直接访问功能页,则不会出现这种情况
潘立 17:11:32
主页面是用IFRAME的,有top,left,main三个框架
功能页在main中,问题是:在功能页中有一个导出excel功能,方法是
response.AppendHeader....
response.Write(.....
response.End();
这样,会弹出一个保存的窗口
当保存完后正常,在后来操作界面时,main中的js脚本,所有使用到document对像的都会出现“未指明的错误”,
包括验证控件的js也会报错
如果不使用框架,直接访问功能页,则不会出现这种情况
导出代码如下
/// <summary>
/// 导出文件
/// </summary>
/// <param name= "ds "> 数据集 </param>
/// <param name= "FileName "> 文件名 </param>
/// <param name= "fileType "> 导出类型(文件反缀,如 "xls ", "txt ") </param>
/// <param name= "ControlPage "> 调用页Page对象 </param>
/// 调用:PubFunction.exportFile(dsUsers, "UserInfo ", "xls ",this.Page);
public static void exportFile(DataSet ds,string FileName,string fileType,System.Web.UI.Page ControlPage)
{
string s=System.Text.Encoding.Default.BodyName.ToString();// .Defalut();
HttpResponse resp;
resp = ControlPage.Response;
//设置类型为中文防止乱码的出现
resp.Charset= "gb2312 ";
//设置输出流为简体中文
resp.ContentEncoding = System.Text.Encoding.GetEncoding( "GB2312 ");
//由于网页编码格式为UTF-8,输出的文件名应对应该格式
resp.AppendHeader( "Content-Disposition ", "attachment;filename= " +HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)+ ". "+fileType);
string colHeaders= " ", ls_item= " ";
int i=0;
//定义表对象与行对像,同时用DataSet对其值进行初始化
DataTable dt=ds.Tables[0];
DataRow[] myRow=dt.Select( " ");
// typeid== "1 "时导出为EXCEL格式文件;typeid== "2 "时导出为XML格式文件
//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
for(i=0;i <dt.Columns.Count-1;i++)
colHeaders+=dt.Columns[i].Caption.ToString()+ "\t ";
colHeaders +=dt.Columns[i].Caption.ToString() + "\r\n ";
//向HTTP输出流中写入取得的数据信息
resp.Write(colHeaders);
//逐行处理数据
foreach(DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for(i=0;i <dt.Columns.Count-1;i++)
ls_item +=row[i].ToString() + "\t ";
ls_item += row[i].ToString() + "\r\n ";
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
resp.Write(ls_item);
ls_item= " ";
}
//写缓冲区中的数据到HTTP头文件中
resp.End();
}
[解决办法]
resp.AppendHeader( "Content-Disposition ", "attachment;filename= " +HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)+ ". "+fileType);
已经将页面破坏掉了,页面里面的东西自然也就不存在了
[解决办法]
FileInfo fi = new FileInfo(destFileName);
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.AppendHeader( "Content-Disposition ", "attachment;filename= " + HttpUtility.UrlEncode(Path.GetFileName(destFileName), System.Text.Encoding.UTF8));
Response.AppendHeader( "Content-Length ", fi.Length.ToString());
Response.ContentType = "application/octet-stream ";
Response.WriteFile(fileRootPath);
Response.Flush();
Response.End();
[解决办法]
楼上两为已经把问题说清楚了,帮顶一下
[解决办法]
这种错误以前也犯过,仔细想一下其实不难理解:用Response.AppendHeader方法修改http头信息后,这个页面已不再是text/html类型的文档了,而应该是二进制的byte流了,所以脚本根本就没法运行了
[解决办法]
我顶.
[解决办法]
mark
[解决办法]
mark
[解决办法]
学习
[解决办法]
我以前做项目时的实现办法:把下载部分单独做一个页面,下载时把这个页面嵌入到当前页面就行了,可以用iframe,把它的高度和宽度都设为0,用户就看不见这个框架页了,而页面上的其它脚本不受影响.