按钮单击功能运行时禁用按钮或光标等待图标

时间:2015-05-21 19:36:33

标签: c# asp.net ssis

我有一个加载并运行SSIS包的按钮单击功能

<asp:Button ID="btnDoSomething" runat="server" Text="TEST run SSIS" 
    OnClientClick="return confirm('TEST-TEST-TEST')" 
    OnClick="btnDoSomething_Click" />

在点击功能中我尝试将光标设置为等待,将标签设置为等待消息,甚至禁用点击的按钮 - 但是,似乎没有任何事情发生..我做的任何事情都在函数仅在函数(加载和运行SSIS包)完成后发生。

我不知道我真的在乎我如何让最终用户知道该过程正在运行(在IE之外,在标签图标中是一个旋转球&#34;等待......&# 34;消息)

提前感谢(是的,我已经搜索过并搜查过并尝试过......我打赌我错过了一些愚蠢的事情)

    protected void btnDoSomething_Click(object sender, EventArgs e)
    {
        Application app;
        DTSExecResult pkgResults;
        Package pckg;
        Variables vars;

        string SSISPackagePath = @"c:\test.dtsx";

        lblTEST.Text = "please wait ...";
        btnDoSomething.Enabled = false;

        try
        {
            app = new Application();
            pckg = app.LoadPackage(SSISPackagePath, null);
            vars = pckg.Variables;
            vars["PACKAGE_NAME"].Value = "test";

            pkgResults = pckg.Execute(null, vars, null, null, null);

            if (pkgResults == DTSExecResult.Success)
                lblTEST.Text = "shebang - it worked! (" + pkgResults.ToString() + ")";
            else
                lblTEST.Text = "something not good happened... (" + pkgResults.ToString() + ")";
            grdTest.DataBind();
        }
        catch (Exception ex)
        {
            lblTEST.Text = "ERROR: " + ex.Message.ToString();
        }

        btnDoSomething.Enabled = true;
    }

更新:感谢帮助!!

因为我需要确认我添加了一个简单的脚本

    function getConfirm() {
        if (confirm("Are you sure you want to generate letters for all RELEASED campaigns?")) {
            showOverlay();
            return true;
        }
        else return false;
    }

并更改了onClientClick以调用它 OnClientClick =&#34;返回getConfirm();&#34;

对于IE我也添加了

filter: alpha(opacity = 40);

到css所以它会正确显示不透明度。

喜欢叠加..谢谢!! :)

1 个答案:

答案 0 :(得分:1)

选项1:停用按钮

定义一个javascript函数,如下所示。您必须返回true或服务器事件不会触发:

function disabledMe(btn) {
    btn.disabled = "disabled";
    return true;
}

然后,像这样使用它:

<asp:Button ID="btnDoSomething" runat="server" Text="TEST run SSIS" 
   OnClientClick="disabledMe(this);"
   OnClick="btnDoSomething_Click" />

选项2:使用叠加

在我看来,这种技术更好,因为在服务器事件运行时它会阻止与页面的任何交互。

创建一个div,它将被设计为用作叠加层:

<div id="overlay" class="overlay"></div>

这个CSS类可以解决这个问题:

<style type="text/css">
    .overlay {
        background-color: #000;
        cursor: wait;
        display: none;
        height: 100%;
        left: 0;
        opacity: 0.4;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 9999998;
    }
</style>

您需要使用javascript来控制叠加层可见性:

<script>
    function showOverlay() {
        document.getElementById("overlay").style.display = "block";     
    }

    function hideOverlay() {
        document.getElementById("overlay").style.display = "none";
    }
</script>

使用showOverlay功能和客户端按钮单击:

<asp:Button ID="btnDoAnythingElse" runat="server"
            Text="TEST run SSIS" OnClientClick="showOverlay();"
            OnClick="btnDoAnythingElse_Click" />

在服务器事件结束时,注册一个脚本来调用该函数来隐藏叠加层:

protected void btnDoAnythingElse_Click(object sender, EventArgs e)
{
    Thread.Sleep(2000); // simulates a long running process
    ClientScript.RegisterStartupScript(this.GetType(), "hideOverlay", "hideOverlay();", true);
}