绕过ASP.NET MVC中的必需属性

时间:2013-10-20 13:11:50

标签: c# asp.net-mvc validation asp.net-mvc-4

在课堂上我有这个:

public class CustomerMvc 
{
    public int Id { get; set; }

    [Required(ErrorMessage = "LastName mandatory.")]
    public string LastName { get; set; }

    [EmailValidation(ErrorMessage = "Email not valid.")]
    public string Email { get; set; }
}

在另一堂课中,我有这个:

public class CartMvc
{
    public CustomerMvc Customer { get; set; }

    [Required(ErrorMessage = "VAT mandatory.")]
    public int VatId { get; set; }
}

控制器中的Save方法,接收模型类型CartMvc。问题是,在这种情况下,我不想验证属性类型CustomerMvc,而只需要VatId

在这种情况下,有没有办法绕过CustomerMvc的验证?其他方式?

谢谢,

1 个答案:

答案 0 :(得分:3)

您可以使用视图模型:

public class SaveCustomerMvcViewModel
{
    public int Id { get; set; }

    public string LastName { get; set; }

    public string Email { get; set; }
}

然后:

public class SaveCartMvcViewModel
{
    public SaveCustomerMvcViewModel Customer { get; set; }

    [Required(ErrorMessage = "VAT mandatory.")]
    public int VatId { get; set; }
}

当然,您的保存控制器操作将采用适当的视图模型作为参数:

[HttpPost]
public ActionResult Save(SaveCartMvcViewModel model)
{
    ...
}

作为旁注,将[Required]属性放在不可为空的整数属性(您的VatId属性)上几乎没有任何意义,因为不可为空的整数将始终具有值。如果要验证用户是否确实输入了某个值,您最好在视图模型上使用可以为空的整数:

public class SaveCartMvcViewModel
{
    public SaveCustomerMvcViewModel Customer { get; set; }

    [Required(ErrorMessage = "VAT mandatory.")]
    public int? VatId { get; set; }
}