|
|
1
142
在MVC3中添加条件验证规则有更好的方法。让您的模型继承ivalidableObject并实现validate方法:
更多描述请参见 http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx |
|
|
2
61
我通过处理 "ModelState" 控制器包含的字典。ModelState字典包含所有必须验证的成员。 解决方案如下: 如果需要实现 条件验证 基于某些字段(例如,如果a=真,则需要b), 同时维护属性级错误消息传递 (对于对象级别的自定义验证器,这是不正确的)您可以通过处理“modelstate”来实现这一点,只需从中删除不需要的验证器即可。 …在某些班级…
…课程继续…… …在某些控制器操作中…
… 通过这个,我们实现了条件验证,而其他的一切都保持不变。 更新: 这是我的最后一个实现:我在模型上使用了一个接口,并使用了action属性来验证实现上述接口的模型。接口规定了validate(modelstatedictionary modelstate)方法。action属性只调用ivalidatorsomething上的validate(modelstate)。 我不想让这个答案复杂化,所以我没有提到最终的实现细节(最终,这在生产代码中很重要)。 |
|
|
3
33
昨天我也遇到了同样的问题,但我以一种非常干净的方式完成了这项工作,这对客户端和服务器端的验证都有效。 条件:根据模型中其他属性的值,您需要另一个属性。这是密码
这里,propertyname是您要在其上创建条件的属性 DesiredValue是属性名(属性)的特定值,您的其他属性必须根据需要进行验证。 假设你有以下内容
最后,但不是最不重要的,为您的属性注册适配器,以便它可以进行客户端验证(我把它放在global.asax中,application\u start)
|
|
|
4
27
我一直在用这个神奇的装置做动态注释。 ExpressiveAnnotations 你可以验证你梦寐以求的任何逻辑:
|
|
|
5
17
通过从ModelState中删除错误,可以有条件地禁用验证程序:
|
|
|
6
8
谢谢,梅里特:) 我刚把它更新到MVC 3,以防有人发现它有用; http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx 西蒙 |
|
|
7
6
现在有了一个框架,可以立即进行条件验证(以及其他方便的数据注释验证): http://foolproof.codeplex.com/ 具体来说,请查看[RequireDifTrue(“IsSenior”)]验证程序。您将其直接放在要验证的属性上,这样就可以获得与“Senior”属性关联的验证错误的所需行为。 它可以作为Nuget包提供。 |
|
8
3
您需要在个人级别验证,而不是在高级级别验证,或者高级级别必须具有对其父级人员的引用。在我看来,您需要一个自我验证机制来定义对人员的验证,而不是对其属性之一的验证。我不确定,但我认为DataAnnotations不支持这种开箱即用的方式。你能做的就是创造你自己的
我知道验证应用程序块支持开箱即用的自我验证,但是VAB有一个相当陡峭的学习曲线。不过,这里有一个使用vab的例子:
|
|
|
9
3
我有同样的问题,需要修改HTTP请求依赖性所需的[Required]属性make字段。解决方案类似于dan hunex answer,但他的解决方案没有正确工作(见注释)。我不使用不引人注目的验证,只使用microsoftmvcvalidation.js。 在这里。实现自定义属性:
然后,您需要实现您的自定义提供程序,以将其用作global.asax中的适配器。
并用一行代码修改global.asax
这里是
对我来说,主要的优点是,我不必像在不引人注目的验证中那样编写自定义客户端验证程序的代码。它按[要求]工作,但只在您需要的情况下工作。 |
|
|
10
2
|
|
|
11
0
从模型状态中有条件地删除错误的典型用法:
例子:
在您的示例中,保持一切不变,并将建议的逻辑添加到控制器的操作中。我假设传递给Controller操作的ViewModel具有Person和Senior Person对象,其中包含从UI填充的数据。 |
|
|
12
0
我正在使用MVC 5,但您可以尝试如下操作:
在你的例子中,你会说“Issenior==true”。 然后,您只需要检查您的post操作的验证。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |