2014-02-27 45 views
1

我有一些前端的标记,看起来像这样有条件渲染字段验证

<asp:TextBox ID="txtFirst" runat="server" /> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtFirst" /> 

<% if(DisplayRemainingFields) { %> 
    <asp:TextBox ID="txtSecond" runat="server" /> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtSecond" /> 
<% } %> 

<asp:Button ID="btnSubmit" runat="server" Text="SUBMIT" onclick="btnSubmit_Click" /> 

,并在我的代码隐藏我有这样的事情:

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    if(!Page.IsValid) {return;} 

    //Process fields 
}  

如果DisplayRemainingFields是假的(预防txtSecondRequiredFieldValidator2被渲染),Page.IsValid将始终返回false,但如果我注释掉RequiredFieldValidator2,则Page.IsValid返回true。在Chrome浏览器中查看呈现的源代码,很明显,这些控件未添加到页面中,所以为什么Page.IsValid在这些情况下返回false,以及如何通过在我的前端标记中使用条件语句来完成此项工作?

回答

2

虽然您没有将控件呈现给浏览器,但它们仍由ASP.Net实例化。由于它们包含在Page.Validators集合中,它们将影响Page生命周期。将RequiredFieldValidator上的Enabled标志设置为DisplayRemainingFields。

+0

不幸的是,这并没有解决问题。另外,我假设你的意思是'DisplayRemainingFields'而不是'!DisplayRemainingFields' –

+0

我的意思是DisplayRemainingFields。好的,我正在编辑答案。你可以在Page.IsValid上放一个调试点来询问Page.Validators集合来验证它是导致这个问题的RequiredFieldValidator2吗? – Josh