showModalDialog模式窗体文件导出
摘要:
今天客户要求在模式窗体下,做一个word的文件流下载。以前在非模态的窗体做过这个功能,知道在模式窗体下使用文件流弹不出下载页面,所以上网找了一些材料。
解决方案描述:
1、文件下载流输出方式:
FileInfo file = new FileInfo(Server.MapPath(string.Format(@"\Temp\{0}", fileName))); Response.Clear(); Response.Charset = "GB2312"; Response.Buffer = true; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(file.Name)); Response.AppendHeader("Content-Length", file.Length.ToString()); Response.ContentType = "application/msword"; Response.WriteFile(file.FullName); Response.Flush(); HttpContext.Current.ApplicationInstance.CompleteRequest();
使用最简单的WriteFile方法输出文件流;
2、在页面添加一个高、宽为0的iframe,绑定SetTarget前台方法;
<asp:Button ID="printBtn" runat="server" CssClass="StandardBtn50" Text="打印" OnClientClick="SetTarget();" />
<iframe id="download" name="download" height="0px" width="0px"></iframe>
3、控制输出目标,使用jquery过滤,增加的input的click方法,改变target的值
<base target="_self" />
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$(':input').click(function() {
SetSelfTarget(this);
});
});
function SetTarget(){
var htmTarget = document.getElementsByTagName("head");
if ((undefined != htmTarget) && (0 < htmTarget.length)) {
var b = htmTarget[0].getElementsByTagName("base");
if ((undefined != b) && (0 < b.length)) {
b[0].target = "download";
}
}
}
function SetSelfTarget(obj){
if(typeof(obj.defaultValue)!="undefined" && obj.defaultValue!="打印")
{
var htmTarget = document.getElementsByTagName("head");
if ((undefined != htmTarget) && (0 < htmTarget.length)) {
var b = htmTarget[0].getElementsByTagName("base");
if ((undefined != b) && (0 < b.length)) {
b[0].target = "_self";
}
}
}
}
</script>
这样基本可以完美解决,在ie下使用showModalDialog模式窗体导出文件流看不到下载页面的问题。因为是维护的老系统所以没办法,只能凑活使用这种方式解决问题;现在一般都使用div模拟弹出窗体,单位现在用easyui,有希望一块研究的,留言

浙公网安备 33010602011771号