模型中的MVC验证

我目前使用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; }


    }

注册时,这些都使用模型绑定器进行映射,并且一切都很好。 但是,在“编辑我的详细信息”页面上,只有名字,姓氏和电子邮件可以更新。 每当查看帖子回来和modelbinding应用我得到一个警报用户名/密码是必填字段。 尽管在这一点上它不是必需的。 我想过两种方法来解决这个问题,但我认为这两种方法都不合适(但可能是错误的)

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

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

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


最近有类似的问题:需要在验证之前复制属性。 作为回应,我建议创建自定义ModelBinder仅用于此特定操作,我仍然认为这是最佳解决方案。


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; }
}
}
链接地址: http://www.djcxy.com/p/56597.html

上一篇: MVC Validation in Model

下一篇: ModelState for a subset of properties of model in ASP.Net MVC