2014-02-27 83 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