【问题标题】:ASP.Net C# validating model based on MetadataType基于 MetadataType 的 ASP.Net C# 验证模型
【发布时间】:2011-04-03 03:37:51
【问题描述】:

我的团队正在使用 MetadataType 中的模型验证构建 ViewModel。我的问题是我使用的是非 MVC 项目,我可以用它来验证模型吗?如果是的话,你能举个例子吗?

[MetadataType(typeof(PersonMetadata))]
public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
}
 public class PersonMetadata
 {
        [StringLength(255, ErrorMessage="Name is required"), Required]
        [DisplayName("Name")]
        public string Name { get; set; }
 }

提前谢谢你!

【问题讨论】:

  • +1 评论、有用的链接,但最后你认为使用元数据或 Fluent 验证器如何?
  • @M.Radwan 我现在使用了 FluentValidation,它看起来比 MetaData 更简洁易用。

标签: c# asp.net asp.net-mvc-3


【解决方案1】:

我认为这不是做事的好方法。一般来说,使用元数据类是一种设计味道。我最近打开了Fluent Validation for .NET,看起来很有前途,可插入 MVC,但不需要 MVC。

说了这么多,还是可以的:

        var person = new Person(); 
        var controllerSlashValidator = new FakeControllerValidator();
        ModelStateDictionary modelStateDictionary;
        bool isValid = controllerSlashValidator.Validate(person,out modelStateDictionary);

此代码需要下面的FakeControllerValidator

    public class FakeControllerValidator: Controller
    {
        public FakeControllerValidator()
        {
            this.ControllerContext = new ControllerContext(new RequestContext(new HttpContextWrapper(System.Web.HttpContext.Current),new RouteData()),this);
        }
        public bool Validate(object model, out ModelStateDictionary modelStateDictionary)
        {
            bool isValid = TryValidateModel(model);
            modelStateDictionary = ModelState;
            return isValid;
        }
    }

【讨论】:

  • 你能解释一下设计气味是什么吗?
  • @smartcavenman 能否请您提供原因和参考,为什么您认为使用元数据是一种不好的气味,以及您认为使用流利验证更好的原因?
  • @M.Radwan,如果您提出其他问题并发布链接。我会解决的。不鼓励在 cmets 中进行扩展对话。
  • 如果流利的验证器基本上通过将元数据与模型相关联来做同样的事情,为什么你会认为它是一种气味。
  • @ChristopheGeers FluentValidation 的元数据与模型定义完全解耦
猜你喜欢
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2012-01-05
相关资源
最近更新 更多