章老师你好,我目前有个有关UpdateProgress的小问题想请教您~~~在我的程序画面中,有个用来显示讯息的Label,旁边亦放置了一个UpdateProgress,当我按「新增数据」按钮,UpdateProgress 会显示请用户稍候的讯息,但是当这个UpdateProgress在显示数据的时候,它外面的那个Label讯息会显示前一个动作留下的讯息,例如,我第一次新增完数据后讯息列会显示「数据已成功新增」的讯息,但是第二次执行新增时,画面的updateprogress跟它外面的Label会一起出现耶,所以~~~请问老师有没有方法能在updateprogress显示讯息的那段期间将外面显示讯息的Label先隐藏掉,等updateprogress消失时再把Label显示出来呢?
解答
亲爱的Cody读者您好,很感谢您对于章立民研究室的支持,有关于您提到的问题,回复如下:
<!--[if !supportLineBreakNewLine]-->
Partial Class DemoForm001
Inherits System.Web.UI.Page
Protected Property InsertCompleteOrNot() As Boolean
Get
If ViewState("InsertCompleteOrNot") IsNot Nothing Then
Return ViewState("InsertCompleteOrNot")
Else
Return False
End If
End Get
Set(ByVal Value As Boolean)
ViewState("InsertCompleteOrNot") = Value
End Set
End Property
…
Protected Sub FormView1_PreRender(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles FormView1.PreRender
Dim myFormView As FormView = CType(sender, FormView)
Dim myLabel As Label = CType(myFormView.FindControl("Label6"), Label)
If Me.InsertCompleteOrNot Then
myLabel.Text = "已成功新增资料"
myLabel.Visible = True
Else
myLabel.Text = ""
myLabel.Visible = False
End If
Me.InsertCompleteOrNot = False
End Sub
Protected Sub ObjectDataSource1_Inserted(ByVal sender As Object, ByVal e As _
System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) _
Handles ObjectDataSource1.Inserted
If e.AffectedRows = 0 Then
Me.InsertCompleteOrNot = False
Else
Me.InsertCompleteOrNot = True
End If
End Sub
End Class
为了让第二次之后的异步回传在执行之前,能够将 FormView 控件所显示的处理成功讯息隐藏起来,请替 PageRequestManager 对象的 initializeRequest 事件撰写一个 JavaScript 事件处理例程,以便取得 FormView 控件显示成功讯息的 Label 控件,并修改该控件的 CSS 属性设定来隐藏它:
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(hideLabel);
function hideLabel()
{
var label = $get("FormView1_Label6");
if(label)
{
label.style.visibility = "hidden";
}
return true;
}
</script>
欲详细了解 PageRequestManager 对象,请阅读「ASP.NET AJAX 经典范例 100/使用 VB」一书的第 5 章 - 『悠游于异步之间,探索 PageRequestManager』。