MVC 模型需要 true
有没有办法通过数据注释来要求将布尔属性设置为 true?
public class MyAwesomeObj{
public bool ThisMustBeTrue{get;set;}
}
Is there a way through data annotations to require that a boolean property be set to true?
public class MyAwesomeObj{
public bool ThisMustBeTrue{get;set;}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
我会为服务器端和客户端创建一个验证器。使用 MVC 和不显眼的表单验证,只需执行以下操作即可实现:
首先,在项目中创建一个类来执行服务器端验证,如下所示:
接下来,在模型中注释适当的属性:
最后,启用客户端通过将以下脚本添加到您的视图来进行侧面验证:
注意:我们已经创建了一个方法
GetClientValidationRules
,它将我们的注释从模型推送到视图。如果使用资源文件提供国际化错误消息,请删除
FormatErrorMessage
调用(或仅调用基类)并调整GetClientValidationRules
方法,如下所示:I would create a validator for both Server AND Client side. Using MVC and unobtrusive form validation, this can be achieved simply by doing the following:
Firstly, create a class in your project to perform the server side validation like so:
Following this, annotate the appropriate property in your model:
And Finally, enable client side validation by adding the following script to your View:
Note: We already created a method
GetClientValidationRules
which pushes our annotation to the view from our model.If using resource files to supply the error message for internationalization, remove the
FormatErrorMessage
call (or just call the base) and tweak theGetClientValidationRules
method like so:我知道这是一篇较旧的文章,但想分享一种简单的服务器端方法来执行此操作。您创建一个设置为 true 的公共属性,并将您的布尔值与该属性进行比较。如果您的布尔值未被选中(默认为 false),则表单将不会验证。
剃刀代码
I know this is an older post but wanted to share a simple server side way to do this. You create a public property set to true and compare your bool to that property. If your bool is not checked (by default false) the form will not validate.
Razor code
您可以创建自己的验证器:
You could create your own validator:
我尝试了几种解决方案,但没有一个完全适合我获得客户端和服务器端验证。那么我在 MVC 5 应用程序中做了什么来让它工作:
在您的 ViewModel 中(用于服务器端验证):
在您的 Razor 页面中(用于客户端验证):
I tried several solutions but none of them worked completely for me to get both client and server side validation. So what I did in my MVC 5 application to get it to work:
In your ViewModel (for server side validation):
In your Razor page (for client side validation):
我只想引导人们访问以下小提琴: https://dotnetfiddle.net/JbPh0X
用户添加
[Range(typeof(bool), "true", "true", ErrorMessage = "You gotta tick the box!")]
到它们的布尔属性,这会导致服务器端验证工作。为了让客户端验证也正常工作,他们添加了以下脚本:
I would just like to direct people to the following Fiddle: https://dotnetfiddle.net/JbPh0X
The user added
[Range(typeof(bool), "true", "true", ErrorMessage = "You gotta tick the box!")]
to their boolean property which causes server side validation to work.In order to also have the client side validation working, they added the following script:
只需检查其字符串表示形式是否等于
True
:Just check to see whether its string representation is equal to
True
:您可以创建自己的属性或使用 CustomValidationAttribute。
这是使用 CustomValidationAttribute 的方式:
其中 BoolValidation 定义为:
You could either create your own attribute or use the CustomValidationAttribute.
This is how you would use the CustomValidationAttribute:
where BoolValidation is defined as:
[Required]
属性代表需要任何 值 - 它可以是 true 或 false。您必须为此使用另一个验证。[Required]
attribute stands for requiring any value - it can be either true or false. You'd have to use another validation for that.跟进 ta.speot.is 的帖子和 Jerad Rose 的评论:
给定的帖子无法在客户端进行不引人注目的验证。
这应该适用于两个阵营(客户端和服务器):
Following up on the post by ta.speot.is and the comment from Jerad Rose:
The given post will not work client-side with unobtrusive validation.
This should work in both camps (client & server):
对于ASP.NET Core MVC,这里是客户端和服务器验证,基于dazbradbury的解决方案
然后在客户端:
然后用法是:
For ASP.NET Core MVC here is client and server validation, based on dazbradbury's solution
And then on the client:
Then usage is:
我不知道通过 DataAnnotations 的方法,但这在您的控制器中很容易完成。
唯一的其他选择是为服务器端构建自定义验证器和 客户端的远程验证器(远程验证仅在 MVC3+ 中可用)
I don't know of a way through DataAnnotations, but this is easily done in your controller.
The only other option would be to build a custom validator for the server side and a remote validator for the client side (remote validation is only available in MVC3+)
您是否在web.config 中设置了适当的项目?
这可能会导致验证不起作用。
您还可以尝试创建自定义验证属性(因为
[Required]
只关心它是否存在,并且您关心它的值):然后,用法:
From 此处。
Do you have the appropriate items set up in the web.config?
That could cause the validation not to work.
You can also try to create a custom validation attribute (since
[Required]
only cares whether or not it exists, and you care about the value):Then, usage:
From here.
这对我有用。其他什么也没做。 Mvc 5:
模型
视图
This is what worked for me. Nothing else did. Mvc 5:
Model
View
我尝试使用 fields.cage 的答案,但它对我来说不太有效,但是更简单的方法确实有效,而且我不确定到底为什么(也许是不同的 Razor 版本?),但我所要做的就是这样
:在 .cshtml 文件中:
I tried to use fields.cage's answer and it didn't quite work for me, but something simpler did, and I'm not sure exactly why (different Razor version, maybe?), but all I had to do was this:
And in the .cshtml file:
我认为处理此问题的最佳方法是检查控制器中的框是否为真,否则只需向模型添加错误并让它重新显示您的视图。
如前所述,所有 [Required] 所做的就是确保有一个值,在您的情况下,如果不检查,您仍然会得到 false。
I think the best way to handle this is just check in your controller if the box is true otherwise just add an error to your model and have it redisplay your view.
As previously stated all [Required] does is make sure there is a value and in your case if not checked you still get false.
此处查看万无一失的验证。您可以通过 Nuget 下载/安装它。
对于此类事情来说,这是一个很棒的小图书馆。
Check out Foolproof validation here. You can download/install it via Nuget.
It's a great little library for this kind of thing.