当在 catch 块中将 Visible 设置为 true 时,不显示 Asp:Label
Posted
技术标签:
【中文标题】当在 catch 块中将 Visible 设置为 true 时,不显示 Asp:Label【英文标题】:Asp:Label is not displayed when Visible is set to true in a catch block 【发布时间】:2021-12-03 04:58:00 【问题描述】:我的要求是当SQL查询超时并且出现超时异常时显示超时消息。我在 UI 中添加了一个标签,并在出现超时异常时在代码中将 Visibility 设置为 true。在调试时,它到达了我设置 lblTimeout.Visible = True 的那一行,但仍然没有显示消息,因为标签仍然隐藏。
<div id="dvGrid">
<asp:ScriptManager ID="ScriptManager2" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="panel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label runat="server" ID="lblTimeout" Visible="false" Text="Your query timed out"></asp:Label>
<asp:DataGrid ID="dataGrid" AutoGenerateColumns="false">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<input type="Checkbox" name="chkBox" value="Blah" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Button ID="Button1" runat="server" Style="display: none" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
VB.Net 代码:
Public Overrides Function ReadData() As DataSet
Dim con As New SqlConnection()
Dim dataSet As New DataSet()
Dim query As String
Try
query = "Select * from Employees"
query = "WAITFOR DELAY '00:05:00' " + query 'Added for testing
Dim cmd As New SqlDataAdapter(query, con)
cmd.SelectCommand.CommandTimeout = 30
cmd.Fill(dataSet)
'Some Code
Return (dataSet)
Catch ex As SqlException
Logger.Error(ex)
If ex.Number = -2 Then
lblTimeout.Visible = True
End If
Catch ex As Exception
Logger.Error(ex)
Finally
If con IsNot Nothing Then
con.Close()
End If
End Try
Return Nothing
End Function
我经历了一些其他类似的问题,并参考了那些我将标签放在 UpdatePanel 中的问题,并尝试设置 UpdateMode="Always"
但它没有帮助。
【问题讨论】:
ReadData() 何时调用? 它被称为我提到评论'Some Code'的地方。谢谢。 嗯,它应该可以工作,但请记住,当您点击按钮时,页面会到达服务器,然后可能需要 5 秒,或者 20 或 50 秒,然后网页仍然卡在服务器上。如果超时,那么你的代码就完成了,一个页面返回到客户端,并显示出来。因此,只要您意识到在一切都完成并超时之前不会出现超时消息,您就可以了。但是在代码实际超时之前,您不会看到标签。另外,请记住,控件 set = visible 不会在客户端呈现。 谢谢,我需要更改 UpdateMode="Always" 还是 UpdateMode="Conditional" 可以吗? 【参考方案1】:在lblTimeout.Visible = True
之后使用panel.Update()
。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于当在 catch 块中将 Visible 设置为 true 时,不显示 Asp:Label的主要内容,如果未能解决你的问题,请参考以下文章
如何在 jquery 中将 div 元素的可见属性设置为 true 或 false?
在 catch 块中设置对象属性时 PHPUnit 测试失败
调试“WCF 服务库”时在哪里可以设置 try-catch 块(即入口点/Main() 方法在哪里)