Asp.net mvc 2 模型中的MVC验证
我目前正在使用DataAnnotations验证我的MVC2应用程序。然而,我遇到了一个小问题 我目前有一个User类型的对象,它有许多属性。所有这些都是必需的Asp.net mvc 2 模型中的MVC验证,asp.net-mvc-2,data-annotations,Asp.net Mvc 2,Data Annotations,我目前正在使用DataAnnotations验证我的MVC2应用程序。然而,我遇到了一个小问题 我目前有一个User类型的对象,它有许多属性。所有这些都是必需的 public class User { [Required(ErrorMessage = "Username is required")] public string Username { get; set; } [Required(ErrorMessage = "Passwo
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; }
}
在注册时,这些都是使用modelbinder映射的,一切都很好。但是,在“编辑我的详细信息”页面上,只能更新名字、姓氏和电子邮件。
每当视图发回并应用modelbinding时,我都会收到一个警告:用户名/密码是必填字段。即使此时不需要。我想了两种方法来解决这个问题,我觉得这两种方法都不合适(但可能是错误的)
1:创建自定义viewmodel。这将很好地工作,但数据注释需要应用于此viewmodel,这意味着对模型和用户对象进行重复验证
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.
谢谢链接@tpeczek。您的解决方案是一个很好的选择,但是在阅读Jimmy Bogard的文章后,我决定使用1:1 View:ViewModel设置。这样的代码回答对社区没有帮助。想详细说明一下这是如何回答最初的问题的吗?
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; }
}
}