文本框的可见性问题,即使它没有创建

本文关键字:创建 可见性问题 文本 | 更新日期: 2023-09-27 18:12:15

我有两个文本框,txtA和txtB,两者都不会同时显示在显示器上,当我应用条件来检查文本框的可见性时,在代码后面,当文本框甚至没有创建时,它就会成为现实。

ASPX代码:

<%if(CurrentOrderItem.MasterModelName.ToLower().Contains("string1"))
                      { %>
                    <div class="CustomerName clearfix ">
                        <div class="txtInput width464">
                            <asp:TextBox ID="txtA" runat="server" MaxLength="12" />
                        </div>
                    </div>
                    <%} %>
                    <%if (CurrentOrderItem.MasterModelName.ToLower().Contains("string2"))
                      { %>
                        <div class="txtInput width464">
                            <asp:TextBox ID="txtB" runat="server" MaxLength="20" autocomplete="off"/>
                        </div>
                    </div>
                    <%} %>

当我检查到代码隐藏时,未创建的文本框的可见性显示为true

文本框的可见性问题,即使它没有创建

请注意,嵌入在aspx页面中的服务器端代码将在渲染阶段执行。这意味着所有控件都是用这些值创建和初始化的。在渲染之前的所有事件中,你在后台代码中获得每个可用的控件和数据。

http://msdn.microsoft.com/en-us/library/vstudio/0e39s2ck (v = vs.100) . aspx

正如文章中提到的,在ASPX页面中嵌入服务器端代码不是一个好的做法,因为它会导致维护困难和意想不到的结果。

你可以做的是,在后面的代码中,在页面加载中,你可以检查值并使你的控件可见或隐藏

当我应用条件来检查文本框的可见性时,当文本框没有被创建时,它就会成为现实。

TextBox的Visible将始终为true。虽然它在浏览器中不可见,但它的信息存储在ViewState

其他认为

在ASPX页面中放置c#代码是脆弱的,难以维护。

相反,您可以使用面板控件轻松实现相同的结果,它呈现为htmldiv标签
<asp:Panel ID="APanel" runat="server" CssClass="CustomerName clearfix">
    <div class="txtInput width464">
        <asp:TextBox ID="txtA" runat="server" MaxLength="12" />
    </div>
</asp:Panel>
<asp:Panel ID="BPanel" runat="server" CssClass="CustomerName clearfix">
    <div class="txtInput width464">
        <asp:TextBox ID="txtB" runat="server" MaxLength="20" autocomplete="off"/>
    </div>
</asp:Panel>
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (CurrentOrderItem.MasterModelName.ToLower().Contains("string1"))
        {
            APanel.Visible = true;
            BPanel.Visible = false;
        }
        else
        {
            APanel.Visible = false;
            BPanel.Visible = true;
        }
    }
}

在这种方法中,你可以选择面板的可见而不是文本框