我正在研究一個MVC應用程序,我試圖實現一些驗證。我已經構建了使用EF進行存儲的站點以及使用automapper的一組視圖模型。MVC.net使用視圖模型時的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 – Will