我有一些看起来像这样的前端标记
<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
为假(防止txtSecond
和RequiredFieldValidator2
呈现),Page.IsValid
将始终返回false,但如果我注释掉RequiredFieldValidator2
,然后Page.IsValid
返回true。查看Chrome中呈现的源代码,很明显控件没有添加到页面中,为什么Page.IsValid
在这些情况下会返回false,以及如何通过在我的前面使用条件语句来完成这项工作 - 结束标记?
答案 0 :(得分:2)
虽然您没有将控件呈现给浏览器,但它们仍然由ASP.Net实例化。由于它们包含在Page.Validators集合中,因此它们将影响页面生命周期。将RequiredFieldValidator上的Enabled标志设置为DisplayRemainingFields。