繁体   English   中英

ASP.Net MVC3条件验证

[英]ASP.Net MVC3 conditional validation

我在我的应用程序验证上遇到了麻烦。 假设我有以下模型:

    public class Company
    {
        public int id { get; set; }
        [Required]
        public String Name { get; set; }
        public String Location { get; set; }
        public List<Contacts> Contacts { get; set; }
    }

    public class Contact
    {
        public int id { get; set; }
        [Required]
        public String Name { get; set; }
        [DataType(DataType.EmailAddress)]
        public String Email { get; set; }
        public String Telephone { get; set; }
        public String Mobile { get; set; }
    }

现在在公司创建视图中,我有两个按钮,一个用于向公司添加联系人,另一个用于创建新公司。 我检测到在控制器中使用了哪个按钮,如下所示(两个按钮均被命名为“ button”):

    [HttpPost]
    public ActionResult Create(String button, FormCollection collection)
    {
        if(button == "AddContact")
        {
            AddContact(collection);
        }
        else
        {
            CreateCompany(collection);
        }
    }

在创建过程中,代表正在创建的公司的对象存储在会话中(例如HttpContext.Session [“ company”] = company;)

现在的问题是,例如,如果我尝试添加联系人而未先指定公司名称,则会收到验证错误,因为需要公司名称,这不会发生,因为用户可能想在之前添加联系人添加公司信息。 或者,如果我尝试保存公司,也会收到验证错误,因为通常在保存“添加联系人”表格时该表格为空,这意味着未指定联系人姓名(也需要提供)。

我想知道的是,是否只有在使用addContact按钮时才可以验证联系人属性,而仅在按下createCompany按钮时才可以验证公司属性。

现在,我只需要在服务端进行操作,但是如果有人也有解决方案可以在客户端进行操作,我将不胜感激。

您可以通过重写DbContext中的DbEntityValidationResult来使用实体框架提供条件验证。 在DbContext中进行此验证时,您可以访问其他实体。 验证联系人时,您也可以检查公司。 例如:

    protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
    {
        var result = base.ValidateEntity(entityEntry, items);
        ValidateContact(result);
        return result;
    }

    private void ValidateContact(DbEntityValidationResult result)
    {
        var contact= result.Entry.Entity as Contact;
        if (contact!= null && contact.ContactId != 0)
        { 
            // Add validation code here, such as:
            if(!string.IsNullOrEmpty(contact.Company.Name){ 
                     result.ValidationErrors.Add(
                     new DbValidationError(
                       "Contact",
                       "Company name cannot be null or empty when validating contacts.")
                     );
            }
        }
    }

有关更多详细信息,请参见Julia Lerman的程序设计实体框架:DbContext http://www.amazon.com/Programming-Entity-Framework-Julia-Lerman/dp/1449312969

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM