元素.Visible返回false,但它在页面上可见
本文关键字:返回 Visible false 元素 | 更新日期: 2023-09-27 18:22:23
我有下面的if语句,它出现在Page.IsPostBack上,为什么FirstName.Visible、LastName.Visibles、EmailAddress.Visible都是false?:
protected void Page_Load(object sender, EventArgs e)
{
MainLogo.InnerHtml = ModuleEval("HeadlineLandingPage").ToString();
FillLabelsAndImages();
if (!Page.IsPostBack) //Page load
{
//Some random code here
}
else //Submit button load
{
MainLogo.InnerHtml = ModuleEval("HeadlineLandingMasterPage").ToString();
if (FirstName.Visible && LastName.Visible && EmailAddress.Visible)
{
if (detailsResponse.ResponseStatus.Success && detailsResponse.MemberInfo != null)
{
//Random code here
}
else
HandleWebServiceError(detailsResponse.ResponseStatus);
}
else
{
}
}
}
默认情况下,元素不可见:
<input type="text" id="FirstName" runat="server" visible="False" />
然而,当一些用户操作发生时,它们被设置为可见:
FirstName.Visible = true;
当我提交时,这些元素都清晰可见,我不明白为什么asp.net仍然认为它们是不可见的。
如何更改控件?
如果你有效果的东西
protected void Page_Load(object sender, EventArgs e)
{
if(FirstName.Visible && LastName.Visible && EmailAddress.Visible)
{
//Code
}
}
protected void UpdateFirstName(object sender, EventArgs e)
{
FirstName.Visible = true;
}
然后使用ASP.NET事件(如)调用更新
<asp:button text="Button!" onclick="UpdateFirstName" runat="server" />
单击按钮时,首先调用Page_Load。Page_Load运行时,
FirstName.Visible
将是默认值的任意值——在本例中为false。
不幸的是,在Page_Load之前并没有真正调用UpdateFirstName的方法。
最好的解决方案是移动
if(FirstName.Visible && LastName.Visible && EmailAddress.Visible)
逻辑转换为一个不同的函数,该函数可以在UpdateFirstName运行后调用。
通过asp.net控件渲染的元素如果设置为visible=false,则根本不会在页面中渲染。IE:元素将不在输出中。
常规html元素不理解这一点,因此必须设置style="display:none"来隐藏它们,同时使它们在DOM/渲染输出中可用。
因此,如果您使用的不是asp.net控件,则在元素上设置值visible="false",如您为输入元素所示:
<input type="text" id="FirstName" runat="server" visible="False" />
除了在名为visible的元素上放置一个值为False的属性外,什么都不做。
例如:
如果我把以下内容放在asp.net页面中。
<input id="test" runat="server" />
<asp:TextBox ID="test1" runat="server"></asp:TextBox>
然后在服务器端,我运行以下程序:
protected void Page_Load(object sender, EventArgs e)
{
test.Style.Add("display", "none");
test1.Visible = false;
}
呈现的输出将类似于以下内容:
<input name="ctl00$FeaturedContent$test" type="text" id="FeaturedContent_test" style="display:none;" />
在渲染的输出中没有元素test1的符号。而元素测试在输出中,只是它没有在页面上显示为可见元素。
希望能有所帮助。
你试过吗
if (FirstName.Visible == true && LastName.Visible == true && EmailAddress.Visible == true)
{
//your code here
}
你对布尔值的测试,这真的不重要,但值得一试。根据MSDN的.Visible属性"获取或设置一个值,该值指示是否显示控件及其所有子控件。"。因此,您可以获取该值,但仍需要根据该值进行测试。