当在 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 测试失败

qt中的全局try and catch块

调试“WCF 服务库”时在哪里可以设置 try-catch 块(即入口点/Main() 方法在哪里)

如何在 ASP .NET MVC 中将 @title.visible 更改为 false

何时使用 try/catch 块?