如何在Response.End后显示警报

时间:2011-11-26 05:55:39

标签: c# asp.net

我已经知道,Response.End()之后的代码无效。我在alert之后尝试message box Response.End。基本上我正在做的是我将从Excel文件中读取数据并检查excel文件中缺少的数据。我将收集Excel文件中缺少的所有数据,并将它们全部写入text文件,并使用以下代码提示

string strPath = Server.MapPath("ErrorLog") + "\\" + "ErrorLog.txt";
string FileName = "Errorlog" + ".txt";
string[] createText = { sb.ToString() };
File.WriteAllLines(strPath, createText);
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + "");
strPath.Length.ToString());
HttpContext.Current.Response.ContentType = "application/text";
HttpContext.Current.Response.WriteFile(strPath);
HttpContext.Current.Response.End();

在此之后,我想显示一个警告框,上面写着Invalid Data之类的内容。但我想知道在Response.End

之后我该怎么做

//根据lcarus

更新了代码
string strPath = Server.MapPath("ErrorLog") + "\\" + "ErrorLog.txt";
string[] createText = { sb.ToString() };
File.WriteAllLines(strPath, createText);
ClientScriptManager CSM = Page.ClientScript;
string strconfirm = "<script>if(window.confirm('Excel file has Invalid data.')){window.location.href='/Excel1/ErrorLog/ErrorLog.txt'}</script>";
 CSM.RegisterClientScriptBlock(this.GetType(), "Confirm", strconfirm, false);

3 个答案:

答案 0 :(得分:1)

您需要以两部分的方式执行此操作:

收集丢失的数据,将其保存到文件中(顺便说一句,您需要为日志文件创建唯一的名称,除非您计划仅支持您网站上的一个并发用户)并使用ClientScript.RegisterStartupScript调用这样的函数:

ClientScript.RegisterStartupScript(this.GetType(),"somekey",
"alert('Some data missing!'); window.location.href='http://your_site.com/path_to_log_file'",true); 

您将了解path_to_log_file,因为您是在服务器端生成它的人。{/ p>

用户将看到警报并在点击&#34; OK&#34;日志文件将显示在他的浏览器上或要求下载它,具体取决于浏览器是否知道如何处理文件(这通常由文件的扩展名决定)。

<强>更新

示例HTTPHandler实现。

你可以从后面的代码构建这样的链接:

window.location.href='FileDownloader.ashx?FileName=ErrorLog.txt'

public class FileDownloader: IHttpHandler
{
       public bool IsReusable
       {
            get { return true; }
       }

       public void ProcessRequest(HttpContext context)
       {
            // This is where you read the log file and add the content disposition
            //header
            string strPath = Server.MapPath("ErrorLog") + "\\" + context.Request.QueryString["FileName"];

            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + context.Request.QueryString["FileName"] + "");
            strPath.Length.ToString());
            context.Response.ContentType = "application/text";
            context.Response.WriteFile(strPath);
            context.Response.End();

       }
}

答案 1 :(得分:0)

首先在页面类中声明受保护的字符串var:

public partial class YourASPPage : System.Web.UI.Page
{
        protected string Alert = "";
        protected void Page_Load(object sender, EventArgs e)
        {
              Alert = "<script type='text/javascript'>alert('something alerted here');</script>";
        }
}

然后在你的aspx文件中,当你想要显示你的警报时(不是在脚本标签中)写下类似的东西:

<%= Alert %>

答案 2 :(得分:-1)

在Response.End()之后,从后面的代码调用javascript函数将不起作用;但是可以使用beforeunload,它会在Response.End();

之后触发
$(window).bind('beforeunload', function (){
            //here your function
    });