【问题标题】:Triggering multiple validation groups with a single button?用一个按钮触发多个验证组?
【发布时间】:2010-11-02 07:43:02
【问题描述】:

假设页面 TestPage.aspx 有两个控件。第一个控件是一个地址控件,它有一个名为“AddressGroup”的验证组。该组包含几个验证控件,这些控件被整理在该控件的验证摘要中。第二个控件是一个信用卡控件,它有一个名为“CreditCardGroup”的验证组。它还有几个验证器和一个摘要来显示结果。更糟糕的是,页面上有一些随机控件也有与第三个 ValidatorSummary 控件绑定的验证器。

当用户按下“全部执行”按钮时,我希望页面触发所有三个验证组。按钮本身可以绑定到单个组或未标记的组。据我所知,它不能绑定到多个组。

解决方案不是从控件中提取验证,因为这会降低将它们放在单独控件中的价值。感谢您的想法。

【问题讨论】:

    标签: c# asp.net validation


    【解决方案1】:

    在按钮的单击处理程序中分别为每个验证组调用 Validate 方法:

    bool isValidTest = false;
    Validate("AddressGroup");
    isValidTest = IsValid;
    Validate("CreditCardGroup");
    isValidTest &= IsValid;
    // etc.
    if (!isValidTest) return;
    

    您可能遇到的下一个问题是 ValidationSummary 控件链接到单个验证组。我发现显示多个组的所有错误消息(无需遍历控件树)的唯一方法是使用多个 ValidationSummary 控件。

    对于用户控件,您可能希望其 Validate 方法对其包含的所有控件执行验证并显示其自己的摘要。

    编辑添加:不需要 isValidTest 变量。根据文档:

    请注意,当您调用 Validate 方法,IsValid 属性反映 所有组的有效性验证 到目前为止。

    【讨论】:

      【解决方案2】:

      您是在说客户端还是服务器端验证? Jamie 的答案是针对服务器端的,但对于客户端验证,您可能需要编写自己的 JS 函数,该函数将同时触发所有三个组的验证。

      【讨论】:

      • 对于JS,你可以调用Page_ClientValidate(),这将触发页面中所有组的验证。
      【解决方案3】:

      在服务器端调用Page.Validate(),它将验证所有验证器..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 2013-06-16
        • 2017-11-18
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多