C# 切换代码隐藏中gridview eventhandler中的DIV可见性不工作
我有以下gridview和“loadingbar”分区: 我尝试过使用style:display而不是visible属性,我尝试过使用asp:panel而不是div,但是无论我做什么,eventhandler都会运行,但div在运行时永远不会显示 我想在用户单击delete按钮时用javascript显示div,但是在DeleteStuff过程完成后,我如何才能再次隐藏它?您尝试过:C# 切换代码隐藏中gridview eventhandler中的DIV可见性不工作,c#,javascript,asp.net,webforms,lifecycle,C#,Javascript,Asp.net,Webforms,Lifecycle,我有以下gridview和“loadingbar”分区: 我尝试过使用style:display而不是visible属性,我尝试过使用asp:panel而不是div,但是无论我做什么,eventhandler都会运行,但div在运行时永远不会显示 我想在用户单击delete按钮时用javascript显示div,但是在DeleteStuff过程完成后,我如何才能再次隐藏它?您尝试过: protected void DeleteStuff(object sender, GridViewDelete
protected void DeleteStuff(object sender, GridViewDeleteEventArgs e)
{
if (CheckAccess())
{
deleting.Visible = true;
System.Threading.Thread.Sleep(5000);
deleting.Visible = false;
}
else
{
Dispatcher.BeginInvoke((Action) (() => DeleteStuff(sender, e)));
}
}
顺便说一句,您可能应该使用计时器而不是Thread.Sleep(5000)。每当您单击要删除的按钮时,都会向服务器发送提交请求,页面开始刷新。服务器上的方法完成执行后,将重新呈现页面。因此,无论您在方法中做什么,最后的效果都将保留。如果你想在浏览器上显示繁忙的文本,ajax就是一种方式;您必须使用更新面板。试试这个: javascript:
<script type="text/javascript">
function showDeleteConfirm()
{
var isSure = confirm('Really delete?');
if(isSure)
{
document.getElementById("deleting").style['display'] = 'block';
}
}
</script>
<asp:UpdatePanel id="up1" runat="server">
<ContentTemplate>
<asp:GridView ID="importLogGV"
AutoGenerateColumns="false"
DataKeyNames="id"
OnRowDeleting="DeleteStuff"
runat="server"
CssClass="searchListGridView">
<Columns>
<asp:BoundField HeaderText="ID" DataField="id">
[...]
<asp:TemplateField ItemStyle-Width="120">
<ItemTemplate>
<asp:LinkButton ID="lnkDel" CommandName="Delete" Text='Delete' runat="server"
OnClientClick="return showDeleteConfirm();" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<div id="deleting" style="text-align: center" style="display:none" runat="server"
ClientIDMode="Static">Delete in progress...<br />
<asp:Image runat="server" ID="Image1" ImageUrl="~/Images/ajax-loadingbar.gif"/>
</div>
</ContentTemplate>
</asp:UpdatePanel>
protected void DeleteStuff(object sender, GridViewDeleteEventArgs e)
{
//... Real task here
System.Threading.Thread.Sleep(5000);
deleteing.Style['display'] = 'none';
}
顺便说一下,您需要在页面上添加一个
ScriptManager
。每当您单击要删除的按钮时,都会向服务器发送一个提交请求,页面开始刷新。服务器上的方法完成执行后,将重新呈现页面。因此,无论您在方法中做什么,最后的效果都将保留。如果你想在浏览器上显示繁忙的文本,ajax就是一种方式;您必须使用更新面板。Thread.Sleep只是eventhandler中发生的所有数据库内容的快捷方式:)谢谢,这非常有效!这也澄清了为什么它一开始不起作用。
<asp:UpdatePanel id="up1" runat="server">
<ContentTemplate>
<asp:GridView ID="importLogGV"
AutoGenerateColumns="false"
DataKeyNames="id"
OnRowDeleting="DeleteStuff"
runat="server"
CssClass="searchListGridView">
<Columns>
<asp:BoundField HeaderText="ID" DataField="id">
[...]
<asp:TemplateField ItemStyle-Width="120">
<ItemTemplate>
<asp:LinkButton ID="lnkDel" CommandName="Delete" Text='Delete' runat="server"
OnClientClick="return showDeleteConfirm();" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<div id="deleting" style="text-align: center" style="display:none" runat="server"
ClientIDMode="Static">Delete in progress...<br />
<asp:Image runat="server" ID="Image1" ImageUrl="~/Images/ajax-loadingbar.gif"/>
</div>
</ContentTemplate>
</asp:UpdatePanel>
protected void DeleteStuff(object sender, GridViewDeleteEventArgs e)
{
//... Real task here
System.Threading.Thread.Sleep(5000);
deleteing.Style['display'] = 'none';
}