有条件地渲染字段验证器

时间:2014-02-27 20:21:52

标签: c# .net

我有一些看起来像这样的前端标记

<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,以及如何通过在我的前面使用条件语句来完成这项工作 - 结束标记?

1 个答案:

答案 0 :(得分:2)

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