首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp.net自定义验证器问题

问asp.net自定义验证器问题
EN

Stack Overflow用户
提问于 2009-09-14 15:27:08
回答 2查看 449关注 0票数 0

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

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

我有一个有5个选项的下拉列表,根据选择的选项,需要验证其他几个字段。例如,如果从下拉列表中选择"3“,我需要确保填写了字段a、b、c,但如果从下拉列表中选择了"2”,我需要确保a、b为空,e、f为空。

我想问题是,自定义验证器是否与下拉列表相关联,或者您是否将自定义验证器放在所有字段a/b/c/d/e/f etc...or是否存在我可以调用的窗体级别自定义验证器的概念?

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

EN

回答 2

Stack Overflow用户

发布于 2009-09-14 15:55:19

如果您不怕使用MS AJAX工具包,那么您可以快速地做您想做的事情(如果在性能友好性方面可能不是最好的)。

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

让下拉列表autopostback on change和alter哪个验证器根据选定的值启用。

将所有这些都包含在UpdatePanel中,以获得平滑的UI。

另一种方法涉及jQuery和一个验证插件。你只需要花很短的时间来习惯使用任何你喜欢的验证插件。(我喜欢这种方法,因为它在不同的web开发平台上具有高度的可重用性。)最终,您将在下拉列表中附加一个客户端事件,以向不同的字段添加或删除CSS样式;但是,请记住进行防御性编程,并包括服务器端验证。

票数 0
EN

Stack Overflow用户

发布于 2009-09-14 16:36:17

我最近在上处理了1个字段。您应该能够对其进行扩展以检查各种选择,然后检查相关字段是否已填写。

验证可以像这样更新:

代码语言:javascript
复制
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;

您的下一个问题可能是,“我如何指出哪些字段对用户无效?”有几种不同的可能性。

如果这些字段在您的UI上以可视方式分组在一起,那么您只需更新CustomValidator的ErrorMessage,使其显示"The XYZ fields required“。但是,如果不是这样,或者如果您希望为每个无效字段提供一条消息,则可以使用适当的消息添加一个RequiredFieldValidator (或特定字段所需的其他验证),并设置属性(如果对它们进行分组是有意义的),然后根据所做的选择,根据下拉选择来验证特定的组。

如果不同的字段可以与不同的下拉选项相关联,那么ValidationGroup的想法将不可行。相反,您可以禁用每个字段的RequiredFieldValidator,为每个字段的验证器维护一个列表,并且在switch语句中,您可以遍历它们、启用它们、对它们调用 (将值存储在布尔值和结果中),然后将最终的布尔值用于CustomValidator的args.IsValid属性。对结果进行AND运算的示例可以在中看到。

如果你没有正确地调试它,这种方法会变得非常棘手,因为你需要知道所有的启用/禁用正在进行,否则你可能会发现当屏幕上所有的东西都是有效的时,你可能会发现你无法提交页面,但实际上,当你应该在切换之前禁用每个调用的所有验证器,然后只启用你需要的验证器时,就会有一些东西被启用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1422265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档