问题标签 [ivalidatableobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
55 浏览

asp.net - 编写服务方法与编写可验证对象

我正在开发一个 asp.net mvc web 应用程序,我们必须检查用户是否输入了已经存在的 IP 和/或 Mac 地址。目前,我正在通过在我的 POST Create & Edit 操作方法中编写以下服务方法来检查这一点,如下所示:-

其中sj.IsIPUnique &sj.IsMACUnique都是复选框,如果用户想在添加或编辑记录之前检查唯一性,用户将在其中选中此项,如果他未选中复选框,则不会发生唯一性验证。

但是我应该保持我的代码原样还是最好在可验证的对象中进行这种唯一性检查而不是使用服务方法?

0 投票
2 回答
2257 浏览

asp.net - 如果另一个字段不为空,则实现 Require 验证的最佳方法

我的视图中有以下两个字段:-

我要实现的规则是两个字段都是 NullAble,但是如果用户选择了 ConsoleServerID ,那么他需要添加一个 Port 。如果用户将 ConsoleServerID 保留为空,则他不应输入端口号。那么实现此方案的最佳方法是什么,以便我同时拥有客户端和服务器端验证?谢谢

编辑 安装万无一失后,我面临以下问题:-

  1. 未实施客户端验证,并且在检查模型状态在我的控制器类中是否有效时正在实施验证

  2. 如果 [RequiredIfNotEmpty] 为 false,则用户将收到以下消息:- 由于 ConsoleServerID 不为空,因此需要控制台服务器端口。所以为什么将显示 ConsoleServerID 而不是控制台服务器标签的字段名称。

  3. 如果用户尝试提交 ConsoleServerID 为空的表单,那么我将收到以下异常:-

System.Data.Entity.Validation.DbUnexpectedValidationException 未被用户代码处理 HResult=-2146233087 消息=在调用 Foolproof.RequiredIfNotEmptyAttribute.IsValid 验证“控制台服务器端口”期间引发意外异常。有关详细信息,请参阅内部异常。Source=EntityFramework StackTrace:在 System.Data.Entity.Internal.Validation.PropertyValidator.Validate(EntityValidationContext entityValidationContext, InternalMemberEntry property) 在 System.Data.Entity.Internal.Validation.ValidationAttributeValidator.Validate(EntityValidationContext entityValidationContext, InternalMemberEntry property) 在 System. Data.Entity.Internal.Validation.EntityValidator.ValidateProperties(EntityValidationContext entityValidationContext,InternalPropertyEntry parentProperty,列表1 validationErrors) at System.Data.Entity.Internal.Validation.TypeValidator.Validate(EntityValidationContext entityValidationContext, InternalPropertyEntry property) at System.Data.Entity.Internal.Validation.EntityValidator.Validate(EntityValidationContext entityValidationContext) at System.Data.Entity.Internal.InternalEntityEntry.GetValidationResult(IDictionary2 项)在 System.Data.Entity.DbContext.ValidateEntity(DbEntityEntry entityEntry, IDictionary 2 items) at System.Data.Entity.DbContext.GetValidationErrors() at System.Data.Entity.Internal.InternalContext.SaveChanges() at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() at System.Data.Entity.DbContext.SaveChanges() at TMS.Models.Repository.Save() in c:\Users\Administrator\Desktop\New folder (19)\TMS\TMS\TMS\Models\Repository.cs:line 4614 at TMS.Controllers.FirewallController.Edit(FirewallJoin fj, FormCollection formValues) in c:\Users\Administrator\Desktop\New folder (19)\TMS\TMS\TMS\Controllers\FirewallController.cs:line 869 at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 参数) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass81.b__7(IAsyncResult _) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async。 AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.b__33() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.b__49() InnerException: System.NotImplementedException HResult=-2147467263 Message=方法或操作未实现。Source=MVC Foolproof Validation StackTrace: at Foolproof.ModelAwareValidationAttribute.IsValid(Object value) at System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(Object value,

0 投票
1 回答
727 浏览

c# - 使用 IValidatableObject 验证从 POCO 扩展的 ViewModel

想象User课堂。此类提供数据库中使用的唯一属性。

并查看User带有验证器的类模型

看法

控制器

问题

通过属性指定的所有验证都已成功执行,并且所有错误都成功显示在视图中。但是通过的验证IValidatableObject不起作用,也没有显示错误。

0 投票
1 回答
3888 浏览

validation - Controller.ValidateModel 方法。它是如何工作的?

我有以下模型类:

它适用于“经典”,使用如下:

但我也想将此模型类用于另一种 ajax 形式。我有以下方法:

看着

线。如果模型是正确的 - 它工作正常。如果不正确 - 它抛出异常并中断方法的继续执行(并将异常返回到视图)。另外,如果我设置断点

方法,它永远不会在无效的模型案例中调用!(使用有效模型 Validate 方法被调用)。我想要像“经典”方法这样的行为,只需验证模型,然后验证 ModelState.IsValid。ValidateModel(model) 的行为对我来说很奇怪,它是一个“黑匣子”......

0 投票
1 回答
1720 浏览

c# - C# Web Api - IValidatableObject 验证上下文服务提供者为空

我正在尝试IValidatableObject在 web api 2 上下文中使用验证。该Validate方法被调用,但ValidationContext传递的参数有一个调用的方法,该方法GetService始终返回 null,因为从未设置验证上下文的服务提供者。

根据我的所有研究,我们可以在 MVC 框架中轻松配置它,但我没有找到任何关于如何在 web api 2 中配置它的信息。

在验证传递给 的模型时,我们如何将服务提供者设置为验证上下文ApiController

0 投票
0 回答
152 浏览

c# - IValidatableObject 不验证 3 个输入的长度

我已经失败了很长一段时间试图弄清楚这一点。我正在尝试提示用户输入电话号码的区号、后缀和前缀。电话号码只有在至少 7 位但不超过 10 位时才有效。我已经尝试过 IValidatableObject 方法,但我无法让它工作。任何想法为什么会这样?

班级:

看法:

0 投票
1 回答
436 浏览

asp.net-mvc - asp.net mvc 使用 IValidatableObject 添加 ModelState 错误

我看到了这个不错的博客,它描述了向 asp.net mvc 视图模型添加条件验证。但是我不确定如何将验证错误添加/绑定到特定模型的属性。我希望将错误消息添加到我的普通 ModelState 对象中,这样我就可以在我的视图中显示如下错误:

我想如果我可以从 ValidateMethod(..) 访问 ModelState 对象,那么我可以这样做:

一切都会顺利进行。我正在尝试添加条件验证。

在此之前有没有人这样做可以提供一些见解?我尝试了博客中的代码,但似乎不完整。

谢谢!

0 投票
2 回答
1941 浏览

asp.net-core - 依赖注入到asp.net核心中的视图模型类

我在我的一个 api 控制器类中使用以下 DTO 类,在一个 asp.net 核心应用程序中。

这就是我在控制器中使用它的方式

但是我System.NullReferenceException在 DTO 类中得到了一个 发生这种情况是因为依赖注入在 DTO 类中不起作用。我怎样才能解决这个问题 ?

0 投票
0 回答
467 浏览

validation - ASP.NET MVC 自定义客户端模型验证(比较两个 int 值)与 ivalidatableobject

我有自定义验证比较模型中的两个值。服务器端验证运行正常。

但是,我想知道我需要添加什么才能使自定义模型验证在客户端工作(即在按下提交按钮之前显示红色的小错误消息)。现在我的红色小错误消息仅在按下提交按钮后出现。

相关代码的简化版本如下:

viewmodel.cs文件中:

在 cshtml 视图中:

发布表单时,我检查控制器内的“ModelState.IsValid”。

包括“jquery.validate.min.js”和“jquery.validate.unobtrusive.min.js”(客户端范围验证工作正常,所以我知道 jquery 库设置正确)。

0 投票
0 回答
500 浏览

asp.net-core-2.0 - PageModel 和 IValidatableObject - 不调用验证

我尝试IValidatableObject在 ASPNET Core 2 中的 Razor Page 模型上实现。

我很惊讶 Validate 方法没有被调用。但是,将所有[BindableProperty]s 移至新类型实现IValidatableObject确实有效。

这是唯一的方法吗? 能够IValidatableObject直接在我的.Microsoft.AspNetCore.Mvc.RazorPages.PageModel类型上实现会很好。