标签: ivalidatableobject

我如何使用IValidatableObject?

据我所知,IValidatableObject它用于以一种方式验证对象,让人们相互比较属性.

我仍然希望有属性来验证单个属性,但我想在某些情况下忽略某些属性的失败.

我是否试图在下面的情况下错误地使用它?如果不是我如何实现这个?

public class ValidateMe : IValidatableObject
{
    [Required]
    public bool Enable { get; set; }

    [Range(1, 5)]
    public int Prop1 { get; set; }

    [Range(1, 5)]
    public int Prop2 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!this.Enable)
        {
            /* Return valid result here.
             * I don't care if Prop1 and Prop2 are out of range
             * if the whole object is not "enabled"
             */
        }
        else
        {
            /* Check if Prop1 and Prop2 …
Run Code Online (Sandbox Code Playgroud)

c# asp.net ivalidatableobject

163
推荐指数
4
解决办法
11万
查看次数

实现IValidatableObject时ValidationContext的用途是什么

我已经实现IValidatableObject了几次并且从未发现解析ValidationContext到Validate方法的目的是什么- 我的典型IValidatableObject实现看起来像这样:

 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
 {
    if (Prop1 == Prop2)
    {
        yield return new ValidationResult(
              "Prop1 and Prop2 must be different.",
              new[] {"Prop1", "Prop2"});
    }
 }
Run Code Online (Sandbox Code Playgroud)

有什么我错过了我可以用validationContext的吗?

编辑:我正在使用ASP.NET MVC,这是在类中实现的 - 而不是在控制器中.

c# .net-4.0 ivalidatableobject

14
推荐指数
2
解决办法
7093
查看次数

IDataErrorInfo vs IValidatableObject?

目前我的业务对象实现IDataErrorInfo.由于我打算在ASP.NET MVC 3中使用这些库,我想我应该实现IValidatableObject或者可能代替.

WPF可以使用IValidatableObject吗?

DataAnnotations如何适应图片?

.net asp.net-mvc .net-4.0 ivalidatableobject

10
推荐指数
1
解决办法
2886
查看次数

IValidatableObject传递验证但StringLength无效

我有一个测试类,有几个测试,检查实体是否IsValid.我开始使用IValidatableObject自己的自定义验证,但我坚持使用正确的验证技术.

这是我的Test类:

[TestFixture]
public class StudentTests {
    private static Student GetContactWithContactInfo()
    {
        return new Student(new TestableContactRepository())
                            {
                                Phone = "7275551111"
                            };
    }

    private static Student GetContactWithoutContactInfo()
    {
        return new Student(new TestableContactRepository());
    }

    [Test]
    public void Student_Saving_StudentHasInfo_IsValid ()
    {
        // Arrange
        Student student = GetContactWithContactInfo();
        // Act
        student.Save();
        // Assert
        Assert.IsTrue(student.IsValid);
    }

    [Test]
    public void Student_Saving_StudentDoesNotHaveInfo_IsNotValid ()
    {
        // Arrange
        Student student = GetContactWithoutContactInfo();
        // Act
        student.Save();
        // Assert
        Assert.IsFalse(student.IsValid);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的实体:

public class Student : …
Run Code Online (Sandbox Code Playgroud)

validation tdd entity c#-4.0 ivalidatableobject

9
推荐指数
1
解决办法
1683
查看次数

IValidatableObject在DataAnnotations失败时触发验证方法

我有一个ViewModel,它有一些DataAnnotations验证,然后对于更复杂的验证实现IValidatableObject并使用Validate方法.

我期待的行为是这样的:首先是所有DataAnnotations,然后,只有在没有错误的情况下,验证方法.我怎么发现这并非总是如此.我的ViewModel(演示版)有一个string,一个decimal和一个文件decimal?.所有这三个属性都只有Required属性.对于string和,decimal?行为是预期的行为,但对于decimal,当为空时,必需的验证失败(到目前为止很好),然后执行Validate方法.如果我检查属性,它的值为零.

这里发生了什么?我错过了什么?

注意:我知道必须使用Required属性来检查值是否为null.所以我希望被告知不要在不可空类型中使用Required属性(因为它不会触发),或者,某种程度上该属性理解POST值并注意该字段未被填充.在第一种情况下,属性不应该触发,并且应该触发Validate方法.在第二种情况下,属性应该触发,并且不应触发Validate方法.但我的结果是:属性触发器和Validate方法触发.

这是代码(没什么特别的):

控制器:

public ActionResult Index()
{
    return View(HomeModel.LoadHome());
}

[HttpPost]
public ActionResult Index(HomeViewModel viewModel)
{
    try
    {
        if (ModelState.IsValid)
        {
            HomeModel.ProcessHome(viewModel);
            return RedirectToAction("Index", "Result");
        }
    }
    catch (ApplicationException ex)
    {
        ModelState.AddModelError(string.Empty, ex.Message);
    }
    catch (Exception ex)
    {
        ModelState.AddModelError(string.Empty, "Internal error.");
    }
    return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)

模型:

public static HomeViewModel LoadHome()
{
    HomeViewModel viewModel = new HomeViewModel();
    viewModel.String = string.Empty;
    return viewModel;
} …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc data-annotations asp.net-mvc-3 ivalidatableobject

8
推荐指数
1
解决办法
1万
查看次数

ASP.NET Web API是否支持IValidatableObject?

我有一个实现IValidatableObject的视图模型,并且还有几个验证属性.当我尝试在我的ApiController上调用一个动作时,只执行属性验证.ASP.NET Web API不支持IValidatableObject吗?复杂验证的替代方法是什么,不能用单个属性表示?

编辑:在某个地方,我必须搞砸了一些东西.验证神秘地开始按预期工作.看起来默认情况下肯定支持IValidatableObject.

validation data-annotations ivalidatableobject asp.net-web-api

5
推荐指数
1
解决办法
2390
查看次数

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

我有以下模型类:

public abstract class CompanyFormViewModelBase
{
    public CompanyFormViewModelBase()
    {
        Role = new CompanyRoleListViewModel();
        ContactPerson = new PersonListViewModel();
        Sector = new SectorListViewModel();
    }
    [Required]
    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }
    public CompanyRoleListViewModel Role { get; set; }
    [Display(Name = "Contact Name")]
    public PersonListViewModel ContactPerson { get; set; }
    public SectorListViewModel Sector { get; set; }
}
public class AddCompanyViewModel : CompanyFormViewModelBase, IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        PlugandabandonEntities db = new PlugandabandonEntities();
        CompanyName = CompanyName.Trim(); …
Run Code Online (Sandbox Code Playgroud)

validation ivalidatableobject asp.net-mvc-5

5
推荐指数
1
解决办法
3709
查看次数

PageModel 和 IValidatableObject - 不调用验证

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

我很惊讶没有调用 Validate 方法。然而,将所有[BindableProperty]s移动到新类型实现IValidatableObject确实有效。

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

ivalidatableobject asp.net-core-2.0 razor-pages

5
推荐指数
0
解决办法
437
查看次数

模型枚举字段的 ASP.NET 自定义 ErrorMessage

我正在开发一个基于 EntityFrameworkCore 并针对 ASP.NET Core 2.1 的网站。我想为模型中的枚举字段指定错误消息,如下所示:

\n\n
[Required(ErrorMessage = "Select an item from the list.")]\npublic MyEnum MyEnum { get; set; }\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,仍然生成库存消息:The value \'0\' is invalid。问题似乎是在评估我的任何代码之前验证枚举类型。这里介绍的两种方法(https://www.codeproject.com/Articles/1204077/ASP-NET-Core-MVC-Model-Validation),要么创建一个继承自 ValidationAttribute 的类,要么让模型继承自 IValidatableObject受此之苦。

\n\n

我找到了一个解决方法:将字段声明为 int,然后使用自定义验证属性:

\n\n
[EnumCheck(typeof(MyEnum), ErrorMessage = "Select an item form the list.")]\npublic int MyEnum { get; set; }\n
Run Code Online (Sandbox Code Playgroud)\n\n

...然后从 ValidationAttribute 继承子类:

\n\n
sealed public class EnumCheck : ValidationAttribute\n{\n    readonly Type t_;\n\n    public EnumCheck(Type t)\n    {\n        t_ = t;\n    }\n\n    public override bool IsValid(object …
Run Code Online (Sandbox Code Playgroud)

c# enums validationattribute ivalidatableobject asp.net-core-2.1

5
推荐指数
1
解决办法
3838
查看次数

C# Web Api - IValidatableObject validationContext 服务提供者为空

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

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

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

c# validation ivalidatableobject asp.net-apicontroller asp.net-web-api2

4
推荐指数
1
解决办法
1639
查看次数

当继承类的基类也具有验证时,如何对其模型进行验证?

好吧,我的问题是我正在使用 aspnetcore 2.1 创建一个 api,为了避免代码重复,我创建了一个具有共享 dtos 属性的抽象类(board、boardforcreation、boardforupdate 等)。我使用 ivalidatableobject 添加到抽象类个性化验证,现在,我想向从抽象类派生的类添加个性化验证,但它告诉我从 ivalidatableobject 接口扩展是多余的,因为它已经在基类中声明了,而且当我在派生类中添加 Validate 方法时,它告诉我它已经声明并实现了,那么,如何使用 ivalidatableobject 在抽象类和派生类中添加验证?或者还有其他方法可以实现这一目标。先感谢您。

public class Board : BoardAbstractBase, IValidatableObject
{
    public Guid BoardId { get; set; }

    public DateTimeOffset StartDate { get; set; }

    public DateTimeOffset EndDate { get; set; }  
}

public abstract class BoardAbstractBase : AbstractBasicEntity, IValidatableObject
{
    public DateTimeOffset EstimatedStartDate { get; set; }


    public DateTimeOffset EstimatedEndDate { get; set; }


    public decimal EstimatedBudget { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

c# inheritance ivalidatableobject asp.net-core

3
推荐指数
1
解决办法
3697
查看次数

IValidatableObject无法在mvc 4 Web应用程序中运行

所以我有一个注册用户和业务合作伙伴的网络应用程序.

这就是我的模型的样子

public class UserModel : IValidatableObject
{
   //here are some properties and methods that I am using in Validate method        

    public CompanyModel Company { get; set; } //this is user Company

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {       
         if (this.UserWithEmailExists())
             yield return new ValidationResult("Email already exists", new[] { "Email" });

         if (this.UserWithUsernameExists())
             yield return new ValidationResult("Username already exists", new[] { "Username" });
    }
}

public class CompanyModel : IValidatableObject
{
    //again here are some properties that i am using in Validate …
Run Code Online (Sandbox Code Playgroud)

validation asp.net-mvc-3 asp.net-mvc-4 ivalidatableobject

2
推荐指数
1
解决办法
3925
查看次数

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

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

public class InviteNewUserDto: IValidatableObject
{
  private readonly IClientRepository _clientRepository;

  public InviteNewUserDto(IClientRepository clientRepository)
  {
    _clientRepository = clientRepository;
  }

  //...code omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)

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

[HttpPost]
public async Task<IActionResult> RegisterUser([FromBody] InviteNewUserDto  model)
{
  if (!ModelState.IsValid) return BadRequest(ModelState);

  //...omitted for brevity

}
Run Code Online (Sandbox Code Playgroud)

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

dependency-injection model-validation ivalidatableobject asp.net-core

1
推荐指数
1
解决办法
1705
查看次数