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

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

1725be849f1aed87ab5369dbad2534fc.png

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

1ab675c15fde34c6cb69f3b36cb3d024.png

出现问题之后,我查了一些资料,发现原来是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 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="户号6665.doc";

string UserAgent = Request.ServerVariables["http_user_agent"].ToLower();

if (UserAgent.IndexOf("firefox") == -1) //如果不是火狐浏览器

{

fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);

}      如此一来,就达到了浏览器兼容。

52e52fb06bae9c2f04807006ff2da59b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值