【问题标题】:Compound Validation化合物验证
【发布时间】:2012-08-03 00:00:39
【问题描述】:

我有一个下拉菜单,如果选择了某个项目,则会弹出一个子表单(出现隐藏的 div),其中包含更多需要填写的内容。对此类事情进行验证的最佳方法是什么?我考虑过编写一个验证器(使用 ValidationAttribute,IClientValidatable),但这意味着我必须从表单的其余部分中取出该组框,以便将它们验证为 1 个对象。

提前致谢。

跟进:我发现这在客户端可以满足我的要求! http://foolproof.codeplex.com/
[必填项]
[需要的话]
[必需的IfTrue]
[RequiredIfFalse]
[RequiredIfEmpty]
[RequiredIfNotEmpty]
[RequiredIfRegExMatch]
[RequiredIfNotRegExMatch]

_
没关系已经发现了一堆万无一失的问题

【问题讨论】:

  • 好像我几乎需要一个 [Required if(something)] 或类似的东西
  • 那么问题是如何验证单击下拉菜单中的项目而显示的“更多内容”?
  • 是的,你如何根据需要的另一个属性有条件地要求它。

标签: asp.net-mvc-3 razor


【解决方案1】:

您需要扩展 ValidationAttribute 以创建自定义验证器。可能是这样的:

        public YourValidatorNameAttribute()
        {
            ErrorMessage =  /** your not valid messaging **/;
        }  



        public override bool IsValid(object value)
        {
            bool isValid = true;
            YourClass c = value as YourClass;
            if (c != null)
            {
                if (/** check if the item in your dropdown is selected**/)
                {
                    isValid = /** check value of fields or whatever validation is needed in the 'more stuff' fields**/;
                }
            }
            return isValid;
        }

【讨论】:

  • 我已经这样做了,但这意味着我必须从我的模型中取出一组东西并创建自己的类来将它作为那个对象,对吗?另外,它如何知道要突出显示的元素?
  • 您不需要创建单独的类,只需使用现有模型即可。 “它如何知道要突出显示的元素”是什么意思?
  • 如果我使用我现有的模型,我应该在构造函数中作为该对象传递什么?好吧,当它验证失败时,它会突出显示一个文本框或任何验证失败。它如何知道我正在测试的元素中的哪个元素导致了验证失败?
  • 验证类将在发布过程中自动传递其对象参数,因为它将绑定到您的主类。您需要做的就是将元数据添加到您的主类以使用您的新验证器:例如) [YourValidator]public class YourClass { ... 验证失败将在类级别,因此您可以将它放在验证摘要,而不是在特定字段旁边。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多