【问题标题】:Validate a bool that must be true using xVal使用 xVal 验证必须为真的布尔值
【发布时间】:2010-01-21 11:06:30
【问题描述】:

我有一个业务需求,要求在允许提交表单之前强制将 HTML 表单上的复选框标记为 true。

如果此框没有通过适当的消息被选中,我可以将用户返回到表单,但希望同时返回来自表单数据的 xVal 验证的所有信息。

我在其他地方找不到任何信息,因此是否可以使用 xVal 来验证布尔值是否为真(或假),类似于使用 [Range(min, max)] DataAnnotation 或者我必须手动添加包含此信息的 .AddModelError(..) ViewModel 的错误?

【问题讨论】:

    标签: asp.net-mvc validation xval boolean


    【解决方案1】:

    您是否尝试过创建自己的 ValidationAttribute?我为这种情况创建了一个 TrueTypeAttribute。

    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace KahunaCentralMVC.Data.ModelValidation.CustomValidationAttributes
    {
        public class TrueTypeAttribute : ValidationAttribute
        {
            public override bool IsValid(object value)
            {
                if (value == null) return false;
                bool newVal;
                try
                {
                    newVal = Convert.ToBoolean(value);
                    if (newVal)
                        return true;
                    else
                        return false;
                }
                catch (InvalidCastException)
                {
                    return false;
                }
            }
        }
    }
    
    [MetadataType(typeof(FooMetadata))]
    public partial class Foo
    {
        public class FooMetadata
        {
            [Required(ErrorMessage = " [Required] ")]
            [TrueTypeAttribute(ErrorMessage = " [Required] ")]
            public bool TruVal { get; set; }
        }
    }
    

    【讨论】:

    • 感谢@MHinton,这对于添加默认消息以外的消息很有用。由于默认消息是合适的,我将按照@jacerhea 的建议使用 [Required] 注释。
    【解决方案2】:

    xVal 将复选框上的必填字段数据注释视为必须选中的。我最近不得不解决这种情况,因为我试图表示一个不可为空的布尔值,其中复选框可以为真或假(只是不为空)。但在你的情况下,这很完美。但是,它提供了一个必填字段验证消息,您可能正在寻找“必须接受这些条款”类型的消息。

    使用 xval 远程规则验证可能最简单,并从 ajax 资源进行验证。

    【讨论】:

    • 幸运的是,复选框的目的是作为对特定表单的签名,因此默认消息在这种情况下非常合适。谢谢@jacerhea。我只是没有将此标记为答案,以防寻找类似答案的人需要留下不同的消息。
    猜你喜欢
    • 2020-10-20
    • 2016-01-06
    • 1970-01-01
    • 2014-06-05
    • 2022-12-12
    • 2021-12-24
    • 2016-05-11
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多