如何在ASP.Net C#中从父服务器端刷新用户控件或调用用户控件函数?

如何在ASP.Net C#中从父服务器端刷新用户控件或调用用户控件函数?,asp.net,download,user-controls,postback,registerstartupscript,Asp.net,Download,User Controls,Postback,Registerstartupscript,我有一个页面,上面有一个下载文件的按钮,按下这个按钮后,我想刷新一个用户控件。这可以通过我在UC中编写的一个函数来完成 因此: 如何从父服务器端调用用户控件中的js函数(用户按下下载按钮下载文件后) 我用了这个代码,但它不起作用 Page.ClientScript.RegisterStartupScript(this.GetType(),"UpdateReportList", "UpdateReportList();", true); 注意:UpdateReportList()是我的用户控件中

我有一个页面,上面有一个下载文件的按钮,按下这个按钮后,我想刷新一个用户控件。这可以通过我在UC中编写的一个函数来完成

因此: 如何从父服务器端调用用户控件中的js函数(用户按下下载按钮下载文件后)

我用了这个代码,但它不起作用

Page.ClientScript.RegisterStartupScript(this.GetType(),"UpdateReportList", "UpdateReportList();", true);
注意:UpdateReportList()是我的用户控件中的js函数


HttpContext.Current.Response.WriteFile(sFilePath)
将附件写入整个响应正文,并且不会通过
Page.ClientScript.RegisterStartupScript()附加任何其他标记或脚本。这就是您在浏览器中看不到触发
UpdateReportList()
的原因

要改变方法,有两个其他选项可以实现此功能

  • 将cookie而不是
    Page.ClientScript.RegisterStartupScript()
    设置为响应头的一部分。使用
    setInterval()
    启动javascript计时器,请求下载、读取cookie、停止计时器、清除cookie并调用
    UpdateReportList()

  • 将整个代码移动到asp.net通用处理程序(.ashx)中,并重复上述相同步骤

  • 您可以根据自己的需求考虑其他一些选项


  • 基于我的问题的@Sudipta Maiti和链接中的@puddleglum answer,我将代码更改为:

    在Download button OnClientClick事件中,我在返回服务器之前添加以下行:

    setTimeout(function () {
            window.location.reload(1);
        }, 3000);
    

    因此,我将有一个短暂的延迟,然后重新加载页面。

    这取决于,文件下载时间未知。因此,计时器是一种选择,帖子是可用的。