首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

#关于document对像未指明的异常#

2012-01-21 
########关于document对像未指明的错误##########主页面是用IFRAME的,有top,left,main三个框架功能页在mai

########关于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,用户就看不见这个框架页了,而页面上的其它脚本不受影响.

热点排行