【问题标题】:MVC Validation in Model模型中的 MVC 验证
【发布时间】:2010-05-30 13:52:54
【问题描述】:

我目前正在使用 DataAnnotations 来验证我的 MVC 2 应用程序。但是,我遇到了一个小问题。

我目前有一个 User 类型的对象,它有许多属性。所有这些都是必需的。

public class User
    {

        [Required(ErrorMessage = "Username is required")]
        public string Username { get; set; }

        [Required(ErrorMessage = "Password is required")]
        public string Password { get; set; }

        [Required(ErrorMessage = "Email is required")]
        public string Email { get; set; }

        [Required(ErrorMessage = "First name is required")]
        public string Firstname { get; set; }

        [Required(ErrorMessage = "Last name is required")]
        public string Lastname { get; set; }


    }

在注册时,这些都使用模型绑定器进行映射,一切正常。但是,在“编辑我的详细信息”页面上,只能更新名字、姓氏和电子邮件。 每当视图回发并应用模型绑定时,我都会收到警告用户名/密码是必填字段。即使此时不需要。我想了两种方法来解决这个问题,我觉得这两种方法都不合适(但可能是错误的)

1:创建自定义视图模型。这可以正常工作,但需要将数据注释应用于此视图模型,这意味着对模型和用户对象进行重复验证。

2:在渲染视图中包含所有字段并将它们发回。这存在安全风险,看起来非常混乱,并且不能很好地扩展到复杂的视图模型。

任何人都可以针对这种情况推荐最佳做法吗?

【问题讨论】:

    标签: asp.net-mvc-2 data-annotations


    【解决方案1】:

    最近有类似的问题: Needing to copy properties before validation。作为回应,我建议创建仅在此特定操作中使用的自定义 ModelBinder,我仍然相信这是最佳解决方案。

    【讨论】:

    【解决方案2】:
    DataType
    
    Specify the datatype of a property
    DisplayName
    
    specify the display name for a property.
    DisplayFormat
    
    specify the display format for a property like different format for Date proerty.
    Required
    
    Specify a property as required.
    ReqularExpression
    
    validate the value of a property by specified regular expression pattern.
    Range
    
    validate the value of a property with in a specified range of values.
    StringLength
    
    specify min and max length for a string property.
    MaxLength
    
    specify max length for a string property.
    Bind
    
    specify fields to include or exclude when adding parameter or form values to model properties.
    ScaffoldColumn
    
    specify fields for hiding from editor forms.
    

    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Web.Mvc;
    namespace Employee.Models
    {
    [Bind(Exclude = "EmpId")]
    public class Employee
    {
    [ScaffoldColumn(false)]
    public int EmpId { get; set; }
    [DisplayName("Employee Name")]
    [Required(ErrorMessage = "Employee Name is required")]
    [StringLength(100,MinimumLength=3)]
    public String EmpName { get; set; }
    [Required(ErrorMessage = "Employee Address is required")]
    [StringLength(300)]
    public string Address { get; set; }
    [Required(ErrorMessage = "Salary is required")]
    [Range(3000, 10000000,ErrorMessage = "Salary must be between 3000 and 10000000")]
    public int Salary{ get; set; }
    [Required(ErrorMessage = "Please enter your email address")]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    [MaxLength(50)]
    [RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Please enter correct email")]
    public string Email { get; set; }
    }
    }
    

    【讨论】:

    • 像这样的纯代码答案对社区没有帮助。想详细说明如何回答最初的问题?
    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多