加载通用处理程序asp.net后执行javascript

时间:2017-05-17 02:53:38

标签: javascript c# asp.net pdf ashx

我有一个带有pdf文件列表的gridview。当用户单击pdf时,它会在页面上显示内联文件。我想在加载pdf后执行一些javascript,但我无法让它工作。问题是pdf会在其他所有内容之后加载,因此load事件会在pdf开始加载之前触发。

我的第一种方法是使用iframe。内部页面将检索文件并将数据写入响应。如前所述,load事件在加载pdf之前发生,我需要它在之后触发。当前代码使用通用处理程序ashx来加载pdf内联。在从ashx泛型处理程序加载服务器端的pdf数据后,如何触发事件来执行javascript?

Aspx页面:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "View")
    {
        int index = Convert.ToInt32(e.CommandArgument.ToString());
        string Id = GridView1.DataKeys[index].Value.ToString();
        HtmlGenericControl myObject = new HtmlGenericControl();
        myObject.TagName = "object";
        Panel1.Controls.Add(myObject);
        myObject.Attributes.Add("data", "GetPdf.ashx?Id=" + Id);
    }
}

通用处理程序ashx:

public void ProcessRequest(HttpContext context)
{
    System.Diagnostics.Debug.WriteLine("GetPdf.ashx started");
    string Id = context.Request.QueryString["Id"];
    byte[] data = GetPdf(Id);
    context.Response.ClearContent();
    context.Response.ContentType = "application/pdf";
    context.Response.AppendHeader("Content-disposition", "inline");
    context.Response.AddHeader("Content-Length", data.Length.ToString());
    context.Response.BinaryWrite(data);
    System.Diagnostics.Debug.WriteLine("GetPdf.ashx is done");
    context.Response.End();
}

1 个答案:

答案 0 :(得分:0)

您是否尝试为object代码onload事件设置事件处理程序?我不确定这是否适用于所有浏览器,但我也不知道您需要使用哪些浏览器。

最坏情况您可以使用setTimeout快速查询PDF的存在。

Here's a previous answer可以帮助您解决这两个问题。