none
IE8导致网站后台操作异常的问题(问题已更新) RRS feed

  • 问题

  • 因为公司部署了WSUS,全部的电脑都从IE7更新为IE8,随后就发现了一些问题
    公司网站的后台管理界面是我在.NET 2.0环境上开发的,用C#语言,前台页面都还正常,后台很多页面不正常,不正常的页面都和DataGrid有关
    具体问题是这样的,我挑选一个比较有代表的页面描述一下——
    1. 页面中有一个DataGrid,上面还有一个TextBox和Button,点击Button会执行一个Button1_Click事件,向DataGrid里添加一行数据
    protected void Page_Load(object sender, EventArgs e)
    
    {
    
    if (!Page.IsPostBack)
    
    {
    
    DataListDataBind();
    
    }
    
    }
    
    protected void Button1_Click(object sender, EventArgs e)
    
    {
    
    ……
    
    comm.Parameters.Add(parm2);
    
    comm.Parameters.Add(parm3);
    
    comm.ExecuteNonQuery();
    
    DataListDataBind();
    
    }
    
    protected void DataListDataBind()
    
    {
    
    SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString1"]);
    
    SqlDataAdapter ad = new SqlDataAdapter("select * from TableA order by id desc", conn);
    
    DataSet dst = new DataSet();
    
    ad.Fill(dst, "Table1");
    
    conn.Open();
    
    this.DataGrid1.DataSource = dst.Tables["Table1"];
    
    this.DataGrid1.DataBind();
    
    conn.Close();
    
    }
    
    


    2. DataGrid里除了编辑、删除功能外,我还加了一个OnItemCommand的LinkButton列,点击这个LinkButton就会对该行的数据进行一个操作(目的是将该行数据的某几个字段copy插入至另一个结构类似的表中)
    protected void DataGrid1_ItemCommand(object sender, DataGridCommandEventArgs e)
    
    
    
    {
    
    
    
    if (((LinkButton)e.CommandSource).CommandName == "CopyDataToTableB") // 执行记录操作
    
    
    
    {
    
    
    
    ……
    
    
    
    comm3.Parameters.Add(parm9);
    
    
    
    comm3.Parameters.Add(parm10);
    
    
    
    comm3.ExecuteNonQuery();
    
    
    
    DataListDataBind();
    
    
    
    }
    
    
    
    }
    
    
    
    
    上面的2个功能,对数据库的操作都正常,以前没升级客户端IE的时候都没问题,但是升级到IE8后,操作时候会出现一些奇怪的事情——
    无论是点击那个Button1_Click,还是执行OnItemCommand,数据执行都正常,但是执行完毕后,页面会变成一个白底的、全是该页面HTML代码的页面!!
    之前一直不知道是这个IE的原因,我也不知道同样的程序为啥以前都正常,现在就不行了。
    于是我把comm.ExecuteNonQuery();后的DataListDataBind();注释掉,改成Response.Redirect("xxxxList.aspx");页面才正常
    这个办法在Button1_Click事件里完全没有问题,因为在数据插入后,重新回到这个页面,新插入的数据永远都是在第一条显示
    但是在对LinkButton列操作的时候就不行了,每次操作后都用Response.Redirect回到第一页,操作起来非常麻烦。
    希望各位大大能给一个有用的解决办法。

    注:网上我看有些人提的在页面中加<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> ,我试过,对我说的这个不起作用。
    • 已编辑 bobwang 2009年12月9日 3:13
    2009年12月7日 3:41

全部回复

  • 补充一下,忘了说
    在我发现是IE8的问题后,我从仓库里找了几台旧的还没升级过IE的电脑拿来测试
    那些出问题的页面,在IE6和IE7下都没问题。
    2009年12月7日 3:54
  • 我觉得奇怪 你用2.0开发 为什么用1.0的DataGrid? 不用gridview?
    2009年12月7日 10:46
  • 这应该是ie8对html 的解释导致的,可以贴一下你的<body>之前的代码看看
    【孟子E章】
    2009年12月7日 13:01
    版主
  • <%@ Register TagPrefix="uc1" TagName="CheckSession" Src="~/admin/CheckSession.ascx" %>
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WorkList.aspx.cs" Inherits="Supermarket.admin.WorkList" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>列表</title>
        <link href="BAdmin.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <form id="form1" runat="server">
    .....
    2009年12月7日 17:48
  • 换另一台装有IE8的机器试试。。。
    。。。。。。。。。。
    2009年12月8日 0:22
  • 换另一台装有IE8的机器试试。。。
    。。。。。。。。。。

    因为WSUS的原因,我这里的客户机全部都已经是IE8了,IE8的机器上操作都发生同样的事情。
    事实证明在WSUS里审批通过IE8是个严重的错误决定,增加了很多麻烦
    一会不能用网银,一会网页出问题,为此花了不少人力物力……
    2009年12月8日 2:52
  • 各位大大辛苦了,我刚才在仔细研究我写的代码,突然发现我之前没表达清楚。
    并不是所有的Button1_Click执行都有问题,如果只是一些文字输入框,就没问题;但凡是和图片相关的,就会有我之前叙述的问题
    下面我贴一个出问题的页面,这个页面最上面是2个输入框,代码如下:
    图片上传:<asp:fileupload runat="server" id="FileUpload1" Width="400px"></asp:fileupload>
    文字标题:<asp:TextBox ID="PicTitle" runat="server" Width="300px" MaxLength="200"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="提交" />


    Button1_Click的代码如下:
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "";
        if (FileUpload1.PostedFile.FileName != "")
        {
            string yyyyMM = DateTime.Now.ToString("yyyyMM");
            string StrSavePathRoot = "~/uploadfile/image/";
            string SavePath = Server.MapPath(StrSavePathRoot) + yyyyMM;
            if (!Directory.Exists(SavePath))
                Directory.CreateDirectory(SavePath);
    
            string ImgPath = FileUpload1.PostedFile.FileName;
            string exName = ImgPath.Substring(ImgPath.LastIndexOf(".") + 1).ToLower();//找出图片的后缀名
            string ImgName = DateTime.Now.ToString("ddHHmmssfff") + "." + exName;
            string ImgExtend = ImgPath.Substring(ImgPath.LastIndexOf(".") + 1);
            if (!(ImgExtend.ToLower() == "jpg" || ImgExtend.ToLower() == "jpeg"))
            {
                Label1.Text = "上传图片的格式不正确!必须是jpg格式的图片。";
                return;
            }
    
            FileUpload1.PostedFile.SaveAs(SavePath + "\\" + ImgName); //上传原始图片
            FileUpload1.Dispose();
    
            string ServerPath = StrSavePathRoot + yyyyMM + "/";
    
            //计算应该显示的大小尺寸
            System.Drawing.Image ImgSize = System.Drawing.Image.FromFile(Server.MapPath(ServerPath) + ImgName); //获取图片长宽   ****当上传了非图片格式的文件,会报错
            int ImgSizeWidth = 1200, ImgSizeHeight = 1200; //设定图片最大尺寸规则
            if (ImgSize.Width > ImgSizeWidth || ImgSize.Height > ImgSizeHeight)
            {
                Label1.Text = "上传图片的尺寸不符合规格!请修改大小!(长宽不得超过1200像素)";
                //删除照片,以免没用的数据占用空间
                ImgSize.Dispose();
                GC.Collect(); //强迫通用语言运行时进行启动垃圾收集线程进行回收工作
                string VirtualPath = StrSavePathRoot + ImgName + "." + ImgExtend.ToLower();
                System.IO.File.Delete(Server.MapPath(VirtualPath)); //删除图
                return;
            }
            else
            {
                GetThumbnailImage4(ServerPath, ImgName, ImgExtend.ToLower(), 75, 3); //先缩小到一个短边为75的略缩图,然后截取多余部分,取当中的小方图
            }
    
            string StrPicTitle = Request.Form["PicTitle"].Replace("'", "''");
    
            string strCon = System.Configuration.ConfigurationManager.AppSettings["ConnectionString1"];
            SqlConnection conn = new SqlConnection(strCon);
            //string id = DataGrid1.DataKeys[(int)e.Item.ItemIndex].ToString();
            SqlCommand comm = new SqlCommand("insert into PicList(PicName,PicTitle) values(@PicName,@PicTitle)", conn);
    
            SqlParameter parm2 = new SqlParameter("@PicName", SqlDbType.VarChar, 30);
            SqlParameter parm3 = new SqlParameter("@PicTitle", SqlDbType.VarChar, 200);
            parm2.Value = yyyyMM + "/" + ImgName;
            parm3.Value = this.PicTitle.Text;
            comm.Parameters.Add(parm2);
            comm.Parameters.Add(parm3);
    
            //判断输入框不能输入超长
            if (System.Text.Encoding.Default.GetBytes(parm3.Value.ToString()).Length <= 200)
            {
                conn.Open();
                comm.ExecuteNonQuery();
                conn.Close();
                DataListDataBind(); //写这句就会发生问题!!!!!!!!!!!!!!!
                //Response.Redirect("PicList.aspx"); //我以前一直是加这句解决的!!!!!
            }
            else
            {
                Label1.Text = "输入文字超过规定长度!";
            }
    
        }
        else
        {
            Label1.Text = "必须为作品上传图片!";
            return;
        }
    
    }


    我最上面描述的那个DataGrid1_ItemCommand,除了数据字段读取、插入至另外一个表外,也包括一个带有图片处理的功能,和我现在贴的这个类似。
    2009年12月8日 8:35
  • 这个问题有人帮忙嘛?
    2009年12月14日 8:54