文件名浏览器兼容性(解决.net 文件名在IE和FireFox不兼容)

来源:互联网 发布:godaddy域名push教程 编辑:程序博客网 时间:2024/06/15 06:57

      最近在做一个系统,系统中有一个功能就是用浏览器打印已经配置好的Word文档到本地,这个功能,其实挺简单的,也很好实现。当时我们是用FireFox做的测试,非常简单就实现了。打印效果如下:

          

      在测试兼容性的时候,我们用IE测试出现了问题(其他浏览器基本上兼容),文档名称出现了乱码,如下图所示

       

      出现问题之后,我查了一些资料,发现原来是IE浏览器与需要对中文名称进行编码,然后再显示,就可以了。我们的源代码如下:

 public void jianxigongzi(FileWagesViewModel enFileWages)        {            if (Session["userID"]==null) {                 RedirectToAction("../Login/Login");            }            //获取模板的路径            var path = Server.MapPath("../Document/1见习工资审批表.doc");            #region 给见习工资审批表的各个参数赋值            string strUserID = Session["userID"].ToString();            //string strUserID = "001";//写死的测试            while (strUserID.Length < 4)            {                strUserID = "0" + strUserID;            }            //获取信函编号            string strCardNo = numberInfo.GetNumber();            while (strCardNo.Length < 4)            {                strCardNo = "0" + strCardNo;            }            string basicInformationNumber = enFileWages.basicInformationNumber;            //获取documentID参数            string number = "LFRC" + strUserID + "No." + strCardNo;            //给word中的表赋值            string name = enFileWages.name;//姓名            string sex = enFileWages.sex;//性别            //调用B层获得出生日期            //FileWagesViewModel resShow = fileWagesInfo.QueryBasicInfo(basicInformationNumber);                      List<BasicInfoViewModel> ShowDetileInfores = resBasicres.ShowdetailBasicInfoLetter(basicInformationNumber).ToList();            BasicInfoViewModel resShow = ShowDetileInfores.FirstOrDefault();            string birthday = resShow.birthday == null ? "" : string.Format("{0:D}", Convert.ToDateTime(resShow.birthday));//出生年月            //调用学历中的方法,获得其他的三个字段            //获得学历表中的信息            StudentStatusInfoViewModel enStudentInfo = queryStudentStatus.QueryDetailStudent(basicInformationNumber);            string enter = enStudentInfo.entranceDate == null ? "" : string.Format("{0:D}", Convert.ToDateTime(enStudentInfo.entranceDate));//入学时间            string graduate = enStudentInfo.graduationDate == null ? "" : string.Format("{0:D}", Convert.ToDateTime(enStudentInfo.graduationDate));//毕业时间            string back = enStudentInfo.educationBackground;//学历            string parttime = resShow.workingtime == null ? "" : string.Format("{0:D}", Convert.ToDateTime(resShow.workingtime)); //参加工作的时间            string fileName = "见习工资审批表.doc";//这是文件名,如果不进行编码,直接放在这里,IE就会乱码            string letterType = "见习工资审批表";            string userId = Session["userID"].ToString();            string letterNum = strCardNo;            //获取模板中设定好的字段            String[] fieldNames = new String[] { "number", "name", "sex", "enter", "graduate", "back", "birthday", "parttime" };            //给模版中参数赋值            Object[] fieldValues = new Object[] { number, name, sex, enter, graduate, back, birthday, parttime };            Print(path, fileName, fieldNames, fieldValues);            filterPrint.FilterPrint(basicInformationNumber, letterType, letterNum, userId);            #endregion        }
      查到问题之后,我们进行了修改,在打印之前,先判断浏览器,如果是IE , 就对filename进行UTF-8的编码,然后再输出,如果不是,就直接输出,这样问题就解决了。修改代码如下:

 

string fileName=<span style="font-family: Arial, Helvetica, sans-serif;">"户号6665.doc"</span><span style="font-family: Arial, Helvetica, sans-serif;">;</span>            string UserAgent = Request.ServerVariables["http_user_agent"].ToLower();            if (UserAgent.IndexOf("firefox") == -1) //如果不是火狐浏览器            {                fileName = HttpUtility.UrlEncode(<span style="font-family: Arial, Helvetica, sans-serif;">fileName</span><span style="font-family: Arial, Helvetica, sans-serif;">, Encoding.UTF8);</span>            }
      如此一来,就达到了浏览器兼容。
         

1 0
原创粉丝点击