2010-03-25 6 views
3

모든 속성에서 Required 특성이있는 전자 메일, 암호, ConfirmPassword 속성을 가진 사용자를 추가하기위한 ViewModel이 있습니다. 사용자를 편집 할 때 암호 및 ConfirmPassword 속성이 필요하지 않도록하고 싶습니다.특정 필드에서 유효성 검사 사용 안 함

다른 컨트롤러 동작에서 특정 속성에 대한 유효성을 비활성화하는 방법이 있습니까, 아니면 별도의 EditViewModel을 만드는 것이 가장 좋습니까?

답변

2

나는 아래로 휴식과 각보기에 대한 모든 일반적인 데이터와 inhierit와 기본 모델을 좋아 :

뿐만 아니라 더 좋은 방법이 있다면이 방법은 매우 깨끗 보이지만 알고 관심
class UserBaseModel 
{ 
    int ID { get; set; } 

    [Required] 
    string Name { get; set; }  

    [Required] 
    string Email { get; set; }    
    // etc... 
} 

class UserNewModel : UserBaseModel 
{ 
    [Required] 
    string Password { get; set; } 

    [Required] 
    string ConfirmPassword { get; set; } 
} 

class UserEditModel : UserBaseModel 
{ 
    string Password { get; set; } 
    string ConfirmPassword { get; set; } 
} 

유연한.

0

조건을 테스트하고 빈 필드를 허용하거나 허용하지 않을 수있는 사용자 지정 특성을 작성할 수 있습니다.

다음은 여기에있는 사람들을위한 간단한 데모입니다. 용도에 맞게 수정해야합니다./

using System.ComponentModel.DataAnnotations; 

    namespace CustomAttributes 

    { 

    [System.AttributeUsage(System.AttributeTargets.Property)] 

    public class MinimumLength : ValidationAttribute 

    { 
     public int Length { get; set; } 
     public MinimumLength() 
     { 
     } 

     public override bool IsValid(object obj) 
     { 
      string value = (string)obj; 
      if (string.IsNullOrEmpty(value)) return false; 
      if (value.Length < this.Length) 
       return false; 
      else 
       return true; 
     } 
    } 
} 

모델;

using CustomAttributes; 

namespace Models 
{ 
    public class Application 
    { 
     [MinimumLength(Length=20)] 
     public string name { get; set; } 
    } 
} 

컨트롤러

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(Application b) 
{ 
    ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

    if (ModelState.IsValid) 
    { 
     return RedirectToAction("MyOtherAction"); 
    } 
    return View(b); 
} 

enter code here 
+0

문제는 내가 필드가 하나의 컨트롤러 액션에서 요구 될 수 있지만 다른 컨트롤러 액션에서 사용자 지정을위한 방법이 알고 속성이 될 수 원하는 어떤 행동을 현재 있니? – adriaanp

+0

예, 지금 당장 생각할 수 없으므로 Google에 맡겨야합니다. 이것은 당신을 도울 수 있습니다. http://stackoverflow.com/questions/1212429/get-controllername-and-actionname-and-populate-the-viewdata-in-master-page – griegs

관련 문제