代码之家  ›  专栏  ›  技术社区  ›  E.J. Brennan

asp.net自定义验证器问题

  •  0
  • E.J. Brennan  · 技术社区  · 15 年前

    我熟悉如何为简单的情况编写和使用自定义验证器(即确保日期大于或等于某个值)。

    您将如何处理此类(常见)场景:

    可能至少有十种不同的方法可以做到这一点,但要寻找最干净的选择。

    2 回复  |  直到 15 年前
        1
  •  0
  •   cfeduke    15 年前

    如果您不害怕使用msajax工具包,那么您可以制作一些能够快速实现您想要的功能的东西(如果性能友好性不是最好的话)。

    创建几个不同的自定义验证器,每个验证器代表与下拉列表项相关联的不同验证目标。将每个验证器的Enabled属性设置为false。

    让下拉列表autopostback on change并根据所选值更改启用的验证器。

    把这些都放在 UpdatePanel 平滑的用户界面。

        2
  •  0
  •   Community pid    7 年前

    answered a similar question 处理了1个字段。您应该能够扩展它来检查各种选择,然后检查相关字段是否已填写。

    验证可以这样更新:

    bool isValid = true;
    
    switch (dropdown.SelectedValue)
    {
        case "Option1":
            // check fields for Option1
            break;
        case "Option2":
            // check fields for Option2
            break;
        default:
            isValid = true;
    }
    
    args.IsValid = isValid;
    

    如果这些字段在用户界面上以可视方式组合在一起,那么您只需更新CustomValidator的ErrorMessage以显示“XYZ字段是必需的”。但是,如果不是这样,或者您希望每个无效字段都有一条消息,您可以使用适当的消息添加RequiredFieldValidator(或特定字段所需的其他验证),并设置 ValidationGroup 属性(如果对它们进行分组是有意义的),则根据所选内容,基于下拉选择验证特定组。

    如果不同的字段可以与不同的下拉选项相关联,那么ValidationGroup的想法就不可行了。相反,您可以禁用每个字段的RequiredFieldValidator,为每个字段的验证器维护一个列表,并且在switch语句中,您可以遍历它们,启用它们,调用 IsValid 在它们上(将值存储在bool和 以及 my reply to another question .

    如果你没有正确地调试它,这种方法会变得非常棘手,而且你会觉得你被黑了,因为你需要知道所有的启用/禁用正在进行中,否则你可能会发现当屏幕上显示的所有内容都有效时,你无法提交页面,但实际上,当您应该在切换之前禁用每个调用上的所有验证器,然后只启用所需的验证器时,某些内容仍然处于启用状态。