0

当用户点击“导出到 Excel”链接时,标准的“文件下载”对话框会呈现给用户。有关示例图像,请参见此处

但在导出 excel 文件之前,我想显示一个警报弹出窗口。但是“保存”对话框遮挡了警报弹出窗口的视图。

如何在不被遮挡的情况下显示弹出窗口?

这是我的代码...

dsResult = clsObj.getSearchResults_BL(detObj);

if (OrdDifference != null && OrdDifference.Any())
{
   ScriptManager.RegisterClientScriptBlock(this.up, this.GetType(), "export", "alert('.....')", true);
   set(dsResult, strName);
}
else
{
  set(dsResult, strName);
}

private void set(DataSet ds, string strFileName)
{
    ExcelEngine excelEngine = new ExcelEngine();
    IApplication application = excelEngine.Excel;
    application.DefaultVersion = ExcelVersion.Excel2007;
    IWorkbook workbook = application.Workbooks.Create(1);
    IWorksheet sheet = workbook.Worksheets[0];
    try
    {
        sheet.Name = strFileName;
        sheet.ImportDataTable(ds.Tables[0], true, 1, 1, -1, -1);

        ...

        workbook.SaveAs(strFileName, ExcelSaveType.SaveAsXLS, HttpContext.Current.Response, ExcelDownloadType.PromptDialog);

    }
    catch (Exception ex)
    {

    }
}
4

1 回答 1

1

你的问题在这里:

ScriptManager.RegisterClientScriptBlock(this.up, this.GetType(), "export", "alert('.....')", true);
set(dsResult, strName);

因为set程序中的方法正在写入响应流,所以调用ScriptManager.RegisterClientScriptBlock最终什么都不做。

您需要通过两个步骤执行此操作:

if (OrdDifference != null && OrdDifference.Any())
{
   //Just do this, nothing more.
   ScriptManager.RegisterClientScriptBlock(this.up, this.GetType(), "export", "alertUser('Some Message Here')", true);

}

现在alertUser在 Javascript 中定义函数:

function alertUser(message)
{
    alert(message);
    window.location='AccepServiceOrder.aspx?o=Export';
}

现在Page_Load检查o查询字符串中的参数

protected void Page_Load(object sender, EventArgs e)
{
     if(Request.QueryString["o"]!=null)
     { 
        dsResult = clsObj.getSearchResults_BL(detObj);
         set(dsResult, strName);
     }
}
于 2012-09-13T15:12:47.120 回答