[英]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.