首页 > 解决方案 > 更改按钮单击时的标签文本也执行其他方法

问题描述

我正在尝试使用其他方法执行的统计信息更新我的 Windows 窗体上的标签,该方法执行抓取网页并创建链接的 zip 文件并创建站点地图页面。最好此按钮将运行抓取操作并正确报告统计信息。目前,抓取过程运行良好,但我想用统计数据更新的标签在按钮单击时没有改变。这是我的代码现在的样子:

protected void btn_click(object sender, EventArgs e)
{
    //Run scrape work
    scrape_work(sender, e);
    //Run statistics work
    statistics(sender, e);
}

protected void scrape_work(object sender, EventArgs e)
{
    //Scraping work (works fine)
}

protected void statistics(object sender, EventArgs e)
{
    int count = 0;
    if (scriptBox.Text != null)
    {
        count += 1;
    }
    var extra = eventsBox.Text;
    var extraArray = extra.Split('\n');
    foreach (var item in extraArray)
    {
        count += 1;
    }
    //scrapeNumLbl is label I want to display text on
    scrapeNumLbl.Text = count.ToString();
}

我是否必须为此过程使用线程,或者是否有其他方法可以使该过程正常工作?我已经尝试过这个解决方案,但是在代码运行但标签没有更新时遇到了同样的问题。任何帮助将不胜感激,这件小事已经困扰我好几个小时了。

标签: c#asp.netwinforms

解决方案


我最终通过将 zip 文件的路径写入表单上的标签按钮而不是在单击按钮时将其发送到客户端浏览器上下载来解决了这个问题。问题是在发送 zip 文件以供下载后,请求就结束了。scrape_work为了确保这两种方法都在正确的时间运行,我将对该方法的调用移到了statistics

为了使路径可单击并正确下载文件,我必须在 .aspx 页面中以 LinkBut​​ton 的形式制作“标签”

<asp:LinkButton ID="lblDownload" runat="server" CssClass="xclass" OnClick="lblDownload_Click"></asp:LinkButton>

并进行如下lblDownload_Click运行:

Response.Clear();
Response.BufferOutput = false;
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "attachment; filename=zipFiles.zip");
string folder = Server.MapPath("~/zip");
string endPath = folder + "/zipFiles.zip";
Response.TransmitFile(endPath);
Response.End();

以这种方式运行它,页面会重新加载正确编写的新标签,并且还可以下载 zip 文件。


推荐阅读