我有一个加载并运行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所以它会正确显示不透明度。
喜欢叠加..谢谢!! :)
答案 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);
}