元素.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仍然认为它们是不可见的。

元素.Visible返回false,但它在页面上可见

如何更改控件?

如果你有效果的东西

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属性"获取或设置一个值,该值指示是否显示控件及其所有子控件。"。因此,您可以获取该值,但仍需要根据该值进行测试。