EXCEL导出的时候用遮幕屏蔽页面,直到文件下载完毕才解除。
c#小菜鸟求救。下载的时候不让客户随便乱点,因为下载的时候数据量有点大,可能时间比较久有10秒左右。
我要客户在下载的时候不能操作页面。下面上代码。
这是导出按钮
<a class="DTTT_button DTTT_button_text DTTT_disabled" id="btn_allot" onclick="disablefun()"><span><i class="fa fa-check"></i>Excel导出</span></a>
这里是导出的js代码://***********************javaScript code ************************************************************************
//EXCEL导出。。
//var time = null;
$("#btn_allot").click(function () {
//$.blockUI(); //遮幕。
jQgridExportExcel("InventoryCheckListHandler.ashx?action=export", regrid, true); //封装好的方法。
//var b = true;
//time = setInterval(function () { disablefun(b) }, "3000") //定时器没效果,暂不展示代码
});
//jqgrid导出Excel通用方法
//url: 地址
//table:datatales表格对象
//isExportFirstColumn:是否导出第一列
//isExportVisible:是否导出隐藏列
function jQgridExportExcel(url, table, isExportFirstColumn, isExportVisible) {
var params = "";
var colNames = $(table).jqGrid('getGridParam', 'colNames');
var colModel = $(table).jqGrid('getGridParam', 'colModel');
for (var i = 0; i < colNames.length; i++) {
if (isExportVisible || !colModel.hidden)
if (isExportFirstColumn || i != 0)
if(colNames[i]!="")
params = params + colNames[i] + ":" + colModel[i].name + ",";
}
params = params.substring(0, params.length - 1);
//生成form表单 提交(submit)之后删除form表单节点。
$('<form id="test" method="post" action="' + url + '&columns=' + params + '"></form>').appendTo('body').submit().remove();
}
下面展示c#后台处理代码://*****************************************c# handler and DAL *********************************************
if (action == "export") //接收到导出请求
{
string preSql = HttpContext.Current.Session["savedSqlForInventoryFormExcel"].ToString();//获取数据库查询语句
string i = context.Request.Params["columns"].ToString();//导出列名
ExcelHelper.ExportDTtoExcel(db.getPreSqlData(preSql).Tables[0], i, "库存报表");
}
---------------------------------------------------- ExportDTtoExcel function code------------------------------------------------------------------
/// <summary>
/// jQgrid导出到Excel文件
/// </summary>
/// <param name="dtSource">源DataTable</param>
/// <param name="strHeaderText">表头文本</param>
/// <param name="strFileName">文件名</param>
public static void ExportDTtoExcel(DataTable dtSource, string strHeaderText, string strFileName)
{
strFileName = strFileName + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
string strFolder = AppDomain.CurrentDomain.BaseDirectory + "\\Temp\\";
string strPath = strFolder + strFileName;
if (!Directory.Exists(strFolder))//如果不存在就创建file文件夹
{
Directory.CreateDirectory(strFolder);
}
using (MemoryStream ms = ExportDT(dtSource, strHeaderText))
{
using (FileStream fs = new FileStream(strPath, FileMode.Create, FileAccess.Write))
{
byte[] data = ms.ToArray();
fs.Write(data, 0, data.Length);
fs.Flush();
}
}
DownloadExcel(strPath, strFileName); //下载文件到本地。
if (File.Exists(strPath))
{
File.Delete(strPath);
}
}
============================ DownloadExcel function code==================================
/// <summary>
/// 下載EXCEL
/// </summary>
/// <param name="filePath">需下載的文件路徑</param>
/// <param name="fileName">下載后的文件名</param>
public static void DownloadExcel(string filePath, string fileName)
{
FileInfo fileInfo = new FileInfo(filePath);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
HttpContext.Current.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("BIG5");
HttpContext.Current.Response.WriteFile(fileInfo.FullName);
HttpContext.Current.Response.Flush();
//HttpContext.Current.Response.End();
}
以上都是关键的代码,其他的无关紧要。
++++++++++++++++++++++++++++++++ 问题描述 ++++++++++++++++++++++++++++++++++++++++++++++
目前我的导出功能是正常的。 但是提示不足。
我是一键导出的,只要点击导出报表,直接就下载到本地。没有弹窗,非AJAX。
请问论坛的大神们,不修改为AJAX情况下能做一个页面遮幕控制吗?
就是点击导出按钮,然后页面遮幕,直到下载完毕之后,遮幕消失。期间是不能操作页面的。。
我的遮幕插件已经有了。
就是[i]$blockUI() 开启遮幕。
$unblockUI() 关闭遮幕。
请各位前辈多多指教。