2013-04-14 44 views
0

我有一个简单的问题, 我在我的表中的两个领域,我需要检查他们是否在数据库中存在或不存储之前.. 在我的模型剃刀MVC的服务器端自定义验证C#

[Required] 
[Display(Name = "Contract Type")] 
public int tb_contract_type_id { get; set; } //This is drop-down box 

[Required] 
[Display(Name = "Domain Name")] 
public string domain_name { get; set; } //this is text-box 

这两个属性我需要检查数据库中是否存在或不存在, 如果它们不存在,那么只有我们需要允许用户添加数据,否则不会。

我已经做到了这一点对于像下面一个领域,现在,我要检查像 db.contracts.Any两个领域做(C => c.domain_name == URL & & tb_contract_type_id == ID)

从模型

[CheckForDomain] 
    [Required] 
    [Display(Name = "Domain Name")] 
    public string domain_name { get; set; } 
... 
public class CheckForDomain : ValidationAttribute 
    { 
     private DataContext db = new DataContext(); 
     protected override ValidationResult IsValid 
      (object value, ValidationContext validationContext) 
     { 
      var URL = value.ToString(); 
      if (db.contracts.Any(c => c.domain_name == URL)) 
      { 
       return new ValidationResult("Domain Name already Exist!!"); 
      } 
      else 
      { 
       return ValidationResult.Success; 
      } 
     } 
    } 

是否有检查,使用自定义验证什么好办法? 我使用实体框架 请建议..

+0

您能否给我们提供关于您想实现什么的更多细节?并给我们代码示例你想要它/ –

+0

我更新了我的问题PLZ检查 – Mukarram

回答

0

通过验证的属性应保持有效状态而不是整个域名/业务逻辑当前对象和检查领域具有独特的价值是业务规则不是“对象规则”。 (像这样实例化上下文也是一种不好的做法,不管它属于某个属性还是其他日常类。)

+0

感谢您的反馈。任何建议如何实现此任务?@Peter – Mukarram

+1

我假设你有一个...服务类正在处理这些类型的对象在您的域中,因此创建一个IsValid方法来验证对象。您可以在方法签名中添加一个辅助参数,以将消息回发到表示层。 IHaveValidationErrors接口的方法:void AddError(string msg),AddError(string property,string msg)。逻辑与您的属性逻辑类似。 –