ASP.NET MVC模型验证打破了MVC规则?

Tom*_*icz 6 asp.net asp.net-mvc model view model-validation

使用ASP.NET MVC,我有一个模型,我附加属性,以便我可以使用MVC模型绑定验证,但这不会打破MVC的规则,你放置属于的项目视图,进入模型?我希望我不是为了变得聪明,但我对其他人的意见感到好奇.

public class Payments
{
    [DataType(DataType.Text)]
    [DisplayFormat(NullDisplayText="")]
    [Display(Name="Payment Id")]
    [Required(ErrorMessage="Required")]
    public int PaymentId { get; set; } //todo: make this into a dropdown

    [DataType(DataType.Text)]
    [Display(Name="Bill Name")]
    [Required(ErrorMessage = "Required")]
    public string PaymentName { get; set; }

    [DataType(DataType.Date)]
    [Display(Name="Date to Post Payment")]
    [Required(ErrorMessage = "Required")]
    public DateTime PaymentDate { get; set; }

    [DataType(DataType.Currency)]
    [Range(0, 922337203685477.5807)]
    [Required(ErrorMessage = "Required")]
    public double PaymentAmount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ell 10

是.这就是为什么你应该使用ViewModels.


Mat*_*ias 10

您可以(但不必须)将这些验证属性放在模型中.

但最好使用ViewModel:

public class PaymentsViewModel
{
    [DataType(DataType.Text)]
    [DisplayFormat(NullDisplayText="")]
    [Display(Name="Payment Id")]
    [Required(ErrorMessage="Required")]
    public int PaymentId { get; set; } //todo: make this into a dropdown

    [DataType(DataType.Text)]
    [Display(Name="Bill Name")]
    [Required(ErrorMessage = "Required")]
    public string PaymentName { get; set; }

    [DataType(DataType.Date)]
    [Display(Name="Date to Post Payment")]
    [Required(ErrorMessage = "Required")]
    public DateTime PaymentDate { get; set; }

    [DataType(DataType.Currency)]
    [Range(0, 922337203685477.5807)]
    [Required(ErrorMessage = "Required")]
    public double PaymentAmount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并在您的视图中,而不是:

@model YourProject.Models.Payments
Run Code Online (Sandbox Code Playgroud)

你用:

@model YourProject.Models.PaymentsViewModel
Run Code Online (Sandbox Code Playgroud)

用于验证.