Asp:Label 在 vi​​sible 设置为 true 时不显示?

Posted

技术标签:

【中文标题】Asp:Label 在 vi​​sible 设置为 true 时不显示?【英文标题】:Asp:Label is not shown when visible is set to true? 【发布时间】:2010-10-06 18:00:37 【问题描述】:

我有一个简单的网络表单,其中有几个列表框和一个搜索按钮。单击该按钮时,它会返回一个 DataSet。如果数据集包含记录,我将最初设置为 false 的 asp:label 设置为 true,但这并没有发生。如果数据集有记录并且可见属性设置为true,标签仍然不显示。

我还尝试将标签和其他几个控件放在 html 表格中,并在表格上设置 runat="server" 属性并更改其可见性,但它也没有显示。

这是aspx代码:

<table>
    <tr>
        <td>
        <asp:Label ID="lblSortBy" runat="server" Text="Sort By:" Visible="false">   
        </asp:Label>
        <asp:DropDownList
                        ID="ddlSortBy" 
                        runat="server" 
                        AutoPostBack="True" 
                        OnSelectedIndexChanged="ddlSortBy_SelectedIndexChanged">
        <asp:ListItem Value="Gross">Gross</asp:ListItem>
        <asp:ListItem Value="Population">Population</asp:ListItem>
        </asp:DropDownList>
        </td>
    </tr>
</table>

这是点击按钮时的简化代码:

public void GetData()

    DataView dv = GetReportData().DefaultView;

    if(dv.ToTable().Rows.Count > 0)
     
        lblSortBy.Visible = true;
     
     else
     
        lblSortBy.Visible = false;
     
  

我在一些 ListBox 和一个 GridView 周围有几个更新面板,但没有标签和下拉菜单。这会导致问题吗?

我做了一个测试,如果找到记录并且标签消失,我将更新面板中的标签设置为 false,因此如果它在更新面板中,它就可以工作。

【问题讨论】:

为了可用性,您应该将 AssociatedControlId 设置为 ddlSortBy 以便将其呈现为实际的 GetData() 方法在何处/何时被调用? 按钮是否在更新面板中?如果不是,并且按下它会导致完整的回发,那么更新面板应该无关紧要。 您已经验证 GetReportData() 实际上是返回行? 【参考方案1】:

如果我没记错的话,您的标签应该存在于更新面板上,因为就静态 HTML 页面而言,您当前的标签仅存在一次,它被设置为不可见。您必须重新加载整个页面才能使其再次可见。

【讨论】:

您的标签在更新面板之外不是异步的。换句话说,如果不刷新整个页面,您就无法更新已经显示在最终用户计算机上的标签。如果标签在更新面板上,您可以。【参考方案2】:

如果按钮位于 UpdatePanel 内,则表、标签等也必须位于 UpdatePanel 内才能更新。否则,单击按钮时只会更新 UpdatePanel 的内容(这就是所谓的partial page-rendering)。

因此,如果按钮位于 UpdatePanel 中,您有两种解决问题的可能性:

    将表格、Label、DropDownList等放到同一个UpdatePanel中 或将它们放在另一个 UpdatePanel 中并将该属性的 UpdateMode 设置为 Always,以便它得到更新,即使 Postback 是由另一个 UpdatePanel 中的控件启动的。

详情请见this page in MSDN。

【讨论】:

【参考方案3】: 您只需要标签本身的 runat="server" 即可;虽然 Visible 应该默认为 True。 确保添加前景色以避免与背景混合。 调试以确保您的标签有内容并且它不在 Visible=False 的另一个控件中。

【讨论】:

已经有内容了,前景色是黑底白字。【参考方案4】:

如果表格正在更改可见并且是标签的父容器,我认为根本没有必要更改标签的可见性,因为它应该始终设置为可见。

【讨论】:

我知道,我只是在试验看看它是 asp.net 控件还是任何控件。这就是为什么您看到标签设置为 false 的原因,但实际上,如果我让表格可见,我只会将标签的可见性设为默认值。【参考方案5】:

我假设如果没有数据,您也将隐藏 ddl。您是否尝试过在它们周围放置一个面板并将其可见性设置为 true

如果您要返回行并且您的按钮位于更新面板中,那么您的标签和 ddl 也在该更新面板中

【讨论】:

但如果找到记录,我将其设置为 true。 您是否调试过它以确保它确实设置了值? k 我只是想知道为什么您的数据视图从 GetData 函数获取其数据,该函数是上述函数的名称。这是一个错误还是只是简写例如 这只是一个速记示例。基本上它返回一个数据集。 您是否尝试过将其可见性设置为 true,如果没有行则将其设置为 false【参考方案6】:

感谢它真的很有用,将 Lable 放在更新面板中。

        <ContentTemplate>
       <table>
           <tr>
                <td>
                     <asp:LinkButton ID="LinkNM" runat="server" Text="Learn>" BackColor="Transparent" style=" color: #6699FF;text-decoration-color:none;border:none;font-size:x-large" OnClick="LinkNM_Click"/>
                    &nbsp;&nbsp;&nbsp;
                                  <asp:Label ID="lblChapterName"  runat="server" BackColor="Transparent" style=" color: #6699FF;text-decoration-color:none;border:none;font-size:x-large" ></asp:Label>

                                </td>
           </tr>
       </table>
             </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="btnFileUpload" />
        </Triggers>

    </asp:UpdatePanel>

【讨论】:

以上是关于Asp:Label 在 vi​​sible 设置为 true 时不显示?的主要内容,如果未能解决你的问题,请参考以下文章

分页展示

数据库分页读取

组合查询 分页

应用程序缓存

在javascript中设置innerHTML并从C#中获取

crontab -e 的编辑器设置为vi编辑器?