2010-05-30 13 views
0

현재 MVC 2 응용 프로그램의 유효성을 검사하기 위해 DataAnnotations를 사용하고 있습니다. 그러나, 나는 작은 문제에 부딪쳤다.MVC 유효성 검사 모델

현재 여러 가지 속성을 가진 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 : renderd보기의 모든 필드를 포함하고 다시 게시하십시오. 이것은 보안상의 위험을 안고 있으며, 실제로 복잡해 보이며 복잡한 뷰 모델로 확장되지 않습니다.

누구나이 상황에 대한 권장 사항을 권장 할 수 있습니까?

답변

1

는 최근 비슷한 질문가 발생했습니다 : Needing to copy properties before validation. 이에 대한 응답으로이 특정 작업에서만 사용을 위해 사용자 지정 ModelBinder를 만드는 것이 좋습니다. 여전히 최상의 솔루션이라고 생각합니다. 링크 @tpeczek에 대한

+0

감사합니다. 귀하의 솔루션은 좋은 옵션이지만 1 : 1보기 : ViewModel 설정은 Jimmy Bogard의 게시물을 읽은 후 http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/에 게시되었습니다. how-we-do-mvc-view-models.aspx가 있습니다. – WDuffy

0
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._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Please enter correct email")] 
public string Email { get; set; } 
} 
} 
+0

이와 같은 코드 전용 답변은 커뮤니티에 도움이되지 않습니다. 이 질문이 원래 질문에 어떻게 대답하는지 자세히 설명합니다. – Werner

관련 문제