文本框的可见性问题,即使它没有创建
本文关键字:创建 可见性问题 文本 | 更新日期: 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;
}
}
}
在这种方法中,你可以选择面板的可见而不是文本框