我是webdevelopment的新手,我似乎无法显示加载的gif,而我正在执行导出后面的代码。
我的onclick事件位于gridview内的Imagebutton上。你能帮我么?我在这里有ImageButtons:
<HeaderTemplate>
<asp:ImageButton ID="btnExport" OnClick="btnExport_Click" runat="server" ImageUrl="~/Images/excel.gif" AlternateText="Export top records!"/>
<asp:ImageButton ID="btnExportRed" OnClick="btnExportRed_Click" runat="server" ImageUrl="~/Images/excel_red.gif" AlternateText="Export all records!"/>
</HeaderTemplate>
这是我背后的代码:
protected void btnExport_Click(object sender, EventArgs e)
{
try
{
LoadWaitImage();
[functional code]
UnloadWaitImage();
}
catch (Exception ex)
{
lblMessage.Text = ex.Message;
upnlMsg.Update();
UnloadWaitImage();
}
}
private void LoadWaitImage()
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "showMyImage", "hideLoading()", true);
}
private void UnloadWaitImage()
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "showMyImage", "hideLoading()", true);
}
和要射击的js:
function showLoading()
{
document.getElementById('lblMessage').value = "";
document.getElementById('ucMarketing_btnSearch').disabled = true;
document.getElementById('btnClearFilters').disabled = true;
document.getElementById('imgSaveToSegments').disabled = true;
document.getElementById('divLoadingImg2').style.display = "";
}
function hideLoading()
{
document.getElementById('ucMarketing_btnSearch').disabled = false;
document.getElementById('btnClearFilters').disabled = false;
document.getElementById('imgSaveToSegments').disabled = false;
document.getElementById('divLoadingImg2').style.display = "none";
}
答案 0 :(得分:0)
我认为你目前的想法不会起作用。呈现HTML的客户端浏览器与运行代码隐藏的服务器完全分开。单击ImageButton时,浏览器会同步将HTML表单发布到服务器,并等待响应。此响应将在事件处理程序方法结束后的某个时间发送。
如果你想在客户端做一些事情(比如显示和隐藏图像),你需要使用AJAX异步做事。使用UpdatePanel
控件,ASP.Net WebForms非常容易。
要使其正常工作,您可以使用UpdatePanel控件围绕要更改的页面区域。然后添加一个或多个要导致更新的触发器。最后使用UpdateProgress
控件显示加载图像。像这样:
<asp:GridView runat="server">
...
<HeaderTemplate>
<asp:ImageButton ID="btnExport" OnClick="btnExport_Click" runat="server"
ImageUrl="~/Images/excel.gif" AlternateText="Export top records!"/>
<asp:ImageButton ID="btnExportRed" OnClick="btnExportRed_Click" runat="server"
ImageUrl="~/Images/excel_red.gif" AlternateText="Export all records!"/>
</HeaderTemplate>
</asp:GridView>
<asp:UpdatePanel ID="Update" runat="server">
<asp:UpdateProgress ID="Progress" runat="server">
<ProgressTemplate>
<!-- HTML/ASP for your image -->
</ProgressTemplate>
</asp:UpdateProgress>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnExport" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
如果您想做更多客户端事情,请查看this answer。
答案 1 :(得分:0)
最后,我使用OnClientClick事件来启动我的Js。 OnClick事件,执行我的服务器端功能以进行导出。在我的导出功能中,我添加了一个唯一的cookie令牌。我将该令牌存储在隐藏字段中,并每秒更改一次。在Js函数中,我启动计时器并检查cookie以匹配令牌。如果是,我隐藏我的加载图像。
我在这里找到了这个解决方案: Detect when browser receives file download