在gridview事件处理程序中切换DIV可见性的代码不工作
Toggle DIV visibility in gridview eventhandler in code behind not working
我有以下gridview和"loadingbar"div:
<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 confirm('Really delete?');" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<div id="deleting" style="text-align: center" Visible="False" runat="server"
ClientIDMode="Static">Delete in progress...<br />
<asp:Image runat="server" ID="Image1" ImageUrl="~/Images/ajax-loadingbar.gif"/>
</div>
当eventhandler"DeleteStuff"运行(它做了很多数据库的事情,可能需要10秒)在代码后面,我需要显示"删除"div,当eventhandler完成它需要隐藏div再次。
这是我在codebehind中删除的eventandler:
protected void DeleteStuff(object sender, GridViewDeleteEventArgs e)
{
deleting.Visible = true;
System.Threading.Thread.Sleep(5000);
deleting.Visible = false;
}
我试过使用style:display代替visible属性,我试过使用asp:panel代替div,但无论我做什么,eventhandler运行,但div在运行时从未显示。
当用户单击删除按钮时,我想到用javascript显示div,但是我如何能够在DeleteStuff过程完成后再次隐藏它?
每当您单击要删除的按钮时,就会向服务器发送提交请求,并且您的页面开始刷新。在服务器上的方法完成执行后,页面将被重新呈现。所以无论你在方法中做什么,最后的效果都会保留。如果你想在浏览器上显示繁忙的文本,ajax是最好的方法;您将不得不使用更新面板。试试这个:
javascript:
<script type="text/javascript">
function showDeleteConfirm()
{
var isSure = confirm('Really delete?');
if(isSure)
{
document.getElementById("deleting").style['display'] = 'block';
}
}
</script>
aspx标记:
<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
。
你试过了吗:
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)));
}
}
顺便说一句,你可能应该使用Timer而不是Thread.Sleep(5000)。
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- jQuery css可见性在load方法中不起作用
- 页面可见性API实际上支持操作系统屏幕锁定吗
- 有没有一种方法可以从隐藏的可见性(CSS,JS)中获得淡入效果
- JavaScript可见性不起作用('隐藏'起作用,'可见'不起作用)
- 从内部回调的可见性
- Openlayers 3为了可见性而绑定到Vector层的复选框没有任何作用
- 在另一个下拉列表中的选择上切换下拉列表中选项的可见性
- 如何禁用mouseout可见性=“;隐藏的“;对小于768px的介质的影响
- 在网格视图的自动刷新过程中,设置内部网格视图文本框的可见性
- 将元素的可见性绑定到另一个元素
- 使用 Javascript 将 HTML 页面中的默认可见性从可见更改为隐藏
- 使用 jQuery 检查文本可见性 .包含代码的行为不符合预期
- 在 jQuery 手风琴样式菜单中切换子项可见性
- CSS 中定义的可见性值未显示在 Javascript 中
- jquery切换可见性
- 如何使用 asp.net 中的另一个下拉列表更改下拉列表选定的索引和可见性
- 为什么 Javascript 函数调用在从代码隐藏更改可见性后不起作用
- 在gridview事件处理程序中切换DIV可见性的代码不工作
- 在哪里添加可见性:在openlayers代码中为false