繁体   English   中英

在ASP.NET MVC中绕过必填属性

[英]Bypass required attribute in ASP.NET MVC

在课堂上我有这个:

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上的验证? 另一种方式 ?

谢谢,

您可以使用视图模型:

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; }
}

当然,现在,您的Save controller动作将采用适当的视图模型作为参数:

[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; }
}

暂无
暂无

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

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