【发布时间】:2011-09-27 05:41:00
【问题描述】:
我正在开发一个 MVC 应用程序,并且正在尝试实现一些验证。我已经构建了站点以使用 EF 进行存储和一组带有自动映射器的视图模型。
我想添加一些验证,如果我将其添加到视图模型中,我相信它会起作用,但是我假设将验证放入 EF 模型中会更好,所以如果将来我创建另一个界面同样的验证也将适用。
首先这是正确的方法,其次我如何让 MVC 在保存对象之前实际测试验证。目前它只是跳过我的 EF 验证。
地址模型是自动生成的,所以我创建了这个部分类来添加验证:
public partial class Address : IValidatableObject
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!string.IsNullOrWhiteSpace(this.AddressLine1) &&
!string.IsNullOrWhiteSpace(this.AddressLine2) &&
!string.IsNullOrWhiteSpace(this.AddressLine3) &&
!string.IsNullOrWhiteSpace(this.Town) &&
!string.IsNullOrWhiteSpace(this.City) &&
!string.IsNullOrWhiteSpace(this.County) &&
!string.IsNullOrWhiteSpace(this.Postcode))
yield return new ValidationResult("Address cannot be blank.");
}
}
这是我的视图模型类,显示名称已更改
public class AddressVM
{
public int? ID { get; set; }
[Display(Name = "Address line 1")]
public string AddressLine1 { get; set; }
[Display(Name = "Address line 2")]
public string AddressLine2 { get; set; }
[Display(Name = "Address line 3")]
public string AddressLine3 { get; set; }
[Display(Name = "Town")]
public string Town { get; set; }
[Display(Name = "City")]
public string City { get; set; }
[Display(Name = "County")]
public string County { get; set; }
[Display(Name = "Postcode")]
public string PostCode { get; set; }
}
这是我的控制器
public ActionResult AddAddress(AddressVM vm)
{
IncidentAddress theAddress = Mapper.Map<AddressVM, Address>(vm);
if (ModelState.IsValid)
{
UOW.Addresses.Add(theAddress);
UOW.Save();
}
return PartialView("AddressVM-edit", vm);
}
【问题讨论】:
-
MVC:Controller=MVVM:ViewModel