我在Page_Load中写了从数据库中取二进制流,并根据fileType的类型(doc文档的是:application/msword,图片的是:image/pjpeg)写到新的WEB中,当类型是image/pjpeg的时候,所有都正常,当类型是application/msword的时候,有些webClient打开的时候是正常的,是能用word打开并正常显示word文档的内容,但有些webClient打开的时候,是用word软件打开了,但却显示了Default.aspx里面的内容,后来我把前面两个if语句都蔽掉了,就正常了,但前面两个if语句是要使用的,是什么原因造成这样的情况呢?请各位指教一下,谢!
Page_Load:
if(Session["sesPowerID"] == null)
Response.Redirect("Default.aspx");
if((int)Session["sesPowerID"] < 1)
Response.Redirect("Default.aspx");string sql=...;
SqlConnection connection = new SqlConnection("...");
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
try
{
SqlDataReader dr = command.ExecuteReader();
if(dr.Read())
{
Response.Clear();
Response.AppendHeader("Content-Type",dr["fcFileType"].ToString());
Response.BinaryWrite((byte[])dr["fimContent"]);
}
dr.Close();
}
finally
{
connection.Close();
}

解决方案 »

  1.   

    你用 server.transfer 试试呢?
      

  2.   

    Response.Redirect("Default.aspx");
    后面加上
    Response.End();
      

  3.   

    下面的代码放入else{}试试
    或者试试Response.Write("<script>location.href='Default.aspx'";</script>);
      

  4.   

    我把下面这句蔽掉了,又正常了,但这句是很有用的,蔽了后,如果用户直接输入地址就会出现网页报错的,是什么原因呢?
    if(Session["sesPowerID"] == null)//把这句蔽掉会就正常
      

  5.   

    if(Session["sesPowerID"] == null||(int)Session["sesPowerID"] < 1)
       {
         Response.Redirect("Default.aspx");
       }
    你把这两个写在一起试试。
      

  6.   

    (Session["sesPowerID"]) 是空吗?在你传进来的时候?
      

  7.   

    不知为何,我试过以下2种方法都在部分的机上出现问题,我感觉就像一旦判断了Session["sesPowerID"]==null就会出现问题:
    1.
    try
    {
    if((int)Session["sesPowerID"] < 1){}
    }
    finally
    {Response.Redirect("Default.aspx");}2.把下面的语句放在else中
      

  8.   

    if((Session["sesPowerID"] == null)||(Session["sesPowerID"].ToString=""))
      

  9.   

    我试过只要Session["sesPowerID"]是null值,无论是用try(if((int)Session["sesPowerID"]>1){})catch(Response.Redirect("Default.aspx")),还是用if((Session["sesPowerID"] == null)),在部分的机子上面运行,都会出现用word打开了Default.aspx的界面,我真不明白,同样是用ie打开,为什么会有不同的效果的呢?
      

  10.   

    你到底想干什么?很清楚哈,如果那个Session变量没有,或者Session变量值<1都会跳转到Default.aspx哈,有什么不对的呢?实在不知道你不明白什么?是有些机器上Session永远都没有还是如果Session没有就不要用Word打开了。
      

  11.   

    当Session变量为null时(例如说用户直接输入网址,这个变量肯定是null),如果它是跳到Default.aspx的话,这当然没问题啦,但奇怪的就是在部分的机子上它不是跳到default.aspx(不是一两台,xp和2000的都有),而是用word打开了这个页面(效果就像用复制了default.aspx的界面然后再粘贴在word一样),但去掉判断Session为null时,这个问题却没有出现(如果这时直接输入这个网址,就会出现asp.net提示的错误了,而不是我想提示错误)
      

  12.   

    你就是想要他跳到错误页面的时候不要用Word打开撒。把设置HTTP头的代码放到Redirect之后即可。就是设置application/msword的东西。如果还不放心,可以强制关闭Cache。
      

  13.   

    楼上,我不是想跳到错误页面的时候不要用WORD打开,现在是跳到错误页面的时候是正常的,不正常的就是本来是应该在所有的机子上都应该可以用WORD打开的文档,却在部分的机子上用WORD打开了DEFAULT.ASPX的页面内容(也就是Session==null的那句控制的),而且这个现象不是一台机是这样,有好几台是这样
    但从语句上来看应该是正确的,但就是出现问题,奇怪!!!
      

  14.   

    我汗死,你说的才奇怪呢。你的程序判断Session为空就会跳转到错误页面,把错误页面里面的内容全部输出。这个时候你已经发送了HTTP头令Word打开,或者IE缓冲中的内容认为这个内容是要用Word打开的。那么错误页就会用Word打开了,有什么好奇怪的。Word又不是只能打开DOC的文件,只要你愿意,让他打开个EXE都行。
    所以你搞清楚你的问题先:首先是出现错误页面是不是正常的。如果不正常,例如明明应该有Session却出现了错误页面,检查Coockie是否被禁用,或者Session超时。如果出现错误页面是正常的,例如你要测试Session超时的情况。不正常的是你的错误页面没有用IE打开而是用Word打开的。那么就按我上面所说的检查。
      

  15.   

    楼上,是这样啊:
    我把程序换成:
    if(Session["sesPowerID"] == null)
        Response.Redirect("Default.aspx")
    else
    {
        ......//发送http头,并用相应的程序打开
    }
    即使是换成上面这样,同样的操作,在部分的机子上运行就是用相应的程序(例如WORD)打开了文档,这是正常的,但在部分的机子上却用了相应的程序(例如WORD)打开了DEFAULT.ASPX的页面内容,也就是说Session["sesPowerID"]是不为空的时候,才会用到else里面的语句,但里面的语句是没有出现过default.aspx的东西呀,我都不知是和哪一方面有关系了...
      

  16.   

    你怎么能够保证Session不为空呢?比如说Coockie被阻挡或者Session超时都会导致Session为空哈。
      

  17.   

    我都改成这样了:
    if(Session["sesPowerID"] == null)
        Response.Redirect("Default.aspx")
    else
    {
        ......//发送http头,并用相应的程序打开
    }
    如果Session为空的话就不应该会执行else里面的语句呀
      

  18.   

    Session  的问题,新窗口包括启劝Word打开会使session丢失,从而出现上面的错误
    Response 出类型,这时候启动word, 启动word后服务器会认为不在同一会话中,出现以上情形
      只是猜测...
      

  19.   

    猜测...汗...先谢谢!
    但为什么不同的机子上运行webClient会有不同的两种情况出现呢?
      

  20.   

    session需要cookie的支持,其实session就是一个隐藏的cookie。
      

  21.   

    但当Session不为空时,用
    if((int)Session["sesPowerID"] < 1)
    Response.Redirect("Default.aspx");
    这句是正常的,也就是<1时,是会去default.aspx页的(这就是说是有cookie的支持),只是一旦加上Session==null时,就会出现这个问题
      

  22.   


    新手学习中,顶..........对WEB方面的东西很欠缺,很想多多学习呢!