我有以下if语句,发生在Page.IsPostBack上,为什么FirstName.Visible,LastName.Visible,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仍然认为它们是隐形的。
答案 0 :(得分:2)
你是如何改变控制的?
如果你有什么影响
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
无论默认值是什么 - 在这种情况下都是假的。
不幸的是,在Page_Load之前没有办法调用UpdateFirstName。
最好的解决方案是移动你的
if(FirstName.Visible && LastName.Visible && EmailAddress.Visible)
逻辑到一个不同的函数,可以在UpdateFirstName运行后调用。
答案 1 :(得分:1)
如果设置为visible = false,则通过asp.net控件呈现的元素将不会在页面中呈现。 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的符号。 虽然元素测试在输出中,但它不会在页面上显示为可见元素。
希望有所帮助。
答案 2 :(得分:0)
你试过吗?
if (FirstName.Visible == true && LastName.Visible == true && EmailAddress.Visible == true)
{
//your code here
}
你对一个布尔值的测试,它确实不重要,但它值得一试。根据{{3}},.Visible属性&#34;获取或设置一个值,该值指示是否显示控件及其所有子控件。&#34;。所以你获得了价值,但你仍然需要测试该价值。