Asp.net mvc 5 如何修复模型以正确使用MVC万无一失库?
我试图使用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
[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向我解释
唯一的缺点是,当两个复选框都未选中时,两个控件都会显示错误消息,我只想显示一次。但当选中任何复选框时,验证工作正常,没有错误