Asp.net mvc 5 如何修复模型以正确使用MVC万无一失库?

Asp.net mvc 5 如何修复模型以正确使用MVC万无一失库?,asp.net-mvc-5,foolproof-validation,Asp.net Mvc 5,Foolproof Validation,我试图使用MVC万无一失库分别验证我的模型和显示错误消息。但是,我没有正确应用数据注释,因此验证不起作用 我的要求是我有两个复选框,在提交表单之前至少需要选中其中一个复选框。下面是带有数据注释的模型中两个字段的代码 [RequiredIfFalse("CheckBox2", ErrorMessage = "Please select atleast one checkbox.")] public bool Checkbox1 { get; set; } [Require

我试图使用MVC万无一失库分别验证我的模型和显示错误消息。但是,我没有正确应用数据注释,因此验证不起作用

我的要求是我有两个复选框,在提交表单之前至少需要选中其中一个复选框。下面是带有数据注释的模型中两个字段的代码

    [RequiredIfFalse("CheckBox2", ErrorMessage = "Please select atleast one checkbox.")]
    public bool Checkbox1 { get; set; }

    [RequiredIfFalse("Checkbox1", ErrorMessage = "Please select atleast one checkbox.")]
    public bool CheckBox2 { get; set; }

现在,当我提交表单而不选中任何复选框时,表单将被提交,并且不会显示任何错误。我知道模型和应用自定义验证属性的方式存在一些逻辑错误,因为如果我将第一个字段设置为int或string,并将复选框设置为必需,则验证工作正常,验证消息将相应地显示在视图上。请帮助我识别上述字段中的逻辑错误。

布尔值只有两种状态(
true
false
),其中任何一种都是有效的,因此
[RequiredIfFalse]
实际上是指值必须是
true
false
,它总是假设您使用
@Html.CheckBoxFor()
。您不能对此使用万无一失的验证属性。

布尔值只有两种状态(
true
false
),其中任何一种状态都是有效的,因此
[RequiredIfFalse]
实际上是指值必须是
true
false
,它总是假设您使用
@Html.CheckBoxFor()
。您不能对此使用万无一失的验证属性。

布尔值只有两种状态(
true
false
),其中任何一种状态都是有效的,因此
[RequiredIfFalse]
实际上是指值必须是
true
false
,它总是假设您使用
@Html.CheckBoxFor()
。您不能对此使用万无一失的验证属性。

布尔值只有两种状态(
true
false
),其中任何一种状态都是有效的,因此
[RequiredIfFalse]
实际上是指值必须是
true
false
,它总是假设您使用
@Html.CheckBoxFor()
。您不能对此使用万无一失的验证属性。

当我修改万无一失的数据注释时,我发现我的问题得到了解决,如下所示:

    [RequiredIfNot("CheckBox2", true, ErrorMessage = "Please select atleast one checkbox.")]
    public bool CheckBox1 { get; set; }

    [RequiredIfNot("CheckBox1", true, ErrorMessage = "Please select atleast one checkbox.")]
    public bool CheckBox2 { get; set; }
通过这一点,我实际上是在检查这个值,而这个值不是通过使用RequiredIfFalse来实现的。RequiredIfFalse用于检查是否提供了值,我认为它是在检查字段值是否为false。感谢@Stephen Muecke向我解释

唯一的缺点是,当两个复选框都未选中时,两个控件都会显示错误消息,我只想显示一次。但当选中任何复选框时,验证工作正常,不会显示错误消息

编辑:如果我对任何复选框使用ErrorMessage=“”,则删除重复的错误消息。因此,如果未选中任何复选框,则会显示一次错误消息,如果选中任何复选框,则不会显示任何错误消息

编辑: 这是查看的代码

            <div class="col-sm-3">
                @Html.CheckBoxFor(m => m.CheckBox1)
                @Html.LabelFor(m => m.CheckBox1)
            </div>

            <div class="col-sm-3">
                @Html.CheckBoxFor(m => m.CheckBox2)
                @Html.LabelFor(m => m.CheckBox2)
            </div>

@Html.CheckBoxFor(m=>m.CheckBox1)
@LabelFor(m=>m.CheckBox1)
@Html.CheckBoxFor(m=>m.CheckBox2)
@LabelFor(m=>m.CheckBox2)

还提供了模型的代码,现在我提供了查看代码。在控制器上不做任何其他操作,并且它可以在没有黑客攻击的情况下工作。错误将自动显示在验证摘要中。我还使用了ValidationFor,它也可以很好地使用。

我发现,当我修改了下面的万无一失的数据注释时,我的问题得到了解决

    [RequiredIfNot("CheckBox2", true, ErrorMessage = "Please select atleast one checkbox.")]
    public bool CheckBox1 { get; set; }

    [RequiredIfNot("CheckBox1", true, ErrorMessage = "Please select atleast one checkbox.")]
    public bool CheckBox2 { get; set; }
[Required]
public bool DidWin {get;set;}

[RequiredIfFalse(nameof(DidWin))]
public string ExplainationWhyDidntWin {get;set;}  // Doesn't work

[RequiredIfNot(nameof(DidWin), true)]
public string ExplainationWhyDidntWin2 {get;set;} // Works
通过这一点,我实际上是在检查这个值,而这个值不是通过使用RequiredIfFalse来实现的。RequiredIfFalse用于检查是否提供了值,我认为它是在检查字段值是否为false。感谢@Stephen Muecke向我解释

唯一的缺点是,当两个复选框都未选中时,两个控件都会显示错误消息,我只想显示一次。但当选中任何复选框时,验证工作正常,不会显示错误消息

编辑:如果我对任何复选框使用ErrorMessage=“”,则删除重复的错误消息。因此,如果未选中任何复选框,则会显示一次错误消息,如果选中任何复选框,则不会显示任何错误消息

编辑: 这是查看的代码

            <div class="col-sm-3">
                @Html.CheckBoxFor(m => m.CheckBox1)
                @Html.LabelFor(m => m.CheckBox1)
            </div>

            <div class="col-sm-3">
                @Html.CheckBoxFor(m => m.CheckBox2)
                @Html.LabelFor(m => m.CheckBox2)
            </div>

@Html.CheckBoxFor(m=>m.CheckBox1)
@LabelFor(m=>m.CheckBox1)
@Html.CheckBoxFor(m=>m.CheckBox2)
@LabelFor(m=>m.CheckBox2)

还提供了模型的代码,现在我提供了查看代码。在控制器上不做任何其他操作,并且它可以在没有黑客攻击的情况下工作。错误将自动显示在验证摘要中。我还使用了ValidationFor,它也可以很好地使用。

我发现,当我修改了下面的万无一失的数据注释时,我的问题得到了解决

    [RequiredIfNot("CheckBox2", true, ErrorMessage = "Please select atleast one checkbox.")]
    public bool CheckBox1 { get; set; }

    [RequiredIfNot("CheckBox1", true, ErrorMessage = "Please select atleast one checkbox.")]
    public bool CheckBox2 { get; set; }
[Required]
public bool DidWin {get;set;}

[RequiredIfFalse(nameof(DidWin))]
public string ExplainationWhyDidntWin {get;set;}  // Doesn't work

[RequiredIfNot(nameof(DidWin), true)]
public string ExplainationWhyDidntWin2 {get;set;} // Works
通过这一点,我实际上是在检查这个值,而这个值不是通过使用RequiredIfFalse来实现的。RequiredIfFalse用于检查是否提供了值,我认为它是在检查字段值是否为false。感谢@Stephen Muecke向我解释

唯一的缺点是,当两个复选框都未选中时,两个控件都会显示错误消息,我只想显示一次。但当选中任何复选框时,验证工作正常,没有错误