2011-10-19 5 views
2

Enfity 프레임 워크와 함께 asp.net MVC3을 사용하고 있습니다. 둘 다 WCF 웹 서비스를 통해 통신하고 있습니다.asp.net의 서버 측 유효성 검사 엔티티 프레임 워크가있는 MVC 3

문제는 서버 측 DB 개발자는 Entity 클래스의 [Required]/[Range] 특성을 속성으로 설정하지 않으려한다는 것입니다. 하지만 난 mvc3 응용 프로그램에서 내 끝 부분에서 필드를 확인하고 싶습니다. 어디로 WCF 웹 서비스 참조를 추가했습니다. 어떤 프록시를 생성.

클라이언트 정책에 따라 Jquery/javascript를 사용하고 싶지 않습니다. 그래서 내 컨트롤러/모델 수준에서해야합니다. 어떻게 관리해야합니까? 일부 어떻게 내가 mvc 3 aaplication에서 동적으로 각 엔티티의 속성에 필요한 속성을 추가해야합니다. 속도를 높이려면 올바른 방향이 필요합니다.

추가 정보 잊어 버린 사용자 : 개발자가 필요하지 않음. 또한 엔티티와 매핑에서 db가 생성되지 않습니다.

답변

2

write a code to validate your entities이어야합니다. 개발자가 엔티티에서 이러한 속성을 사용하더라도 WCF 생성 프록시를 통해 DAL에 액세스하고 사용자 측의 도구로 이러한 속성을 생성하지 않으므로 개발자가 사용자 측에서 가질 수없는 특성이 있습니다.

추가 서비스 참조에 의해 생성 된 모든 클래스는 부분적이어야하므로 사용자 정의 부분 부분을 추가하고 유효성을 구현할 수 있습니다 (IValidatableObject 인터페이스 구현).

2

나는 라디 Mrnka에 동의하지만 당신은 엔티티 클래스의 속성을 변경할 수없는 경우, 당신은 그것을 밖으로 소싱 있습니다

[MetadataType(typeof(YourOwnClassForValidation))] 
public partial class ClassOfYourDbDeveloper 
{ 
    // db developer doesn't allow you to change this 
    public string Title { get; set; } 
} 

public class YourOwnClassForValidation 
{ 
    // here you can use your data annotations 
    // important to use object 
    [Required] 
    public object Title { get; set; } 
} 

은 그냥 속성을 설정, 여기에 대한 자세한 내용을 읽은 하단 : http://www.asp.net/mvc/tutorials/validation-with-the-data-annotation-validators-cs

+0

확인을 나는 부분 클래스를 사용하여 프록시에있는 개체의 기존 속성에 속성을 추가 할 수 있습니다. 그게 날 허용 할까? –

+0

프록시에 대해서는 잘 모르겠지만 '[MetadataType (typeOf (YourOwnClassForValidation)]] 속성을 사용하여 유효성 검사 속성이 속성으로 설정된 클래스를 정의 할 수 있습니다. 이는 자동 생성 된 엔티티 클래스가 있으면 다음에 디자이너를 예제로 사용할 때 유용합니다. – Marc

1

모델을 메타 데이터/유효성 검사 공급자로 사용할 클래스를 등록 할 수 있습니다. 당신의 실체를 갖는

, 그 변경할 수 없습니다 :

public class MyModel 
{ 
    public int IntProperty { get; set; } 

    public DateTime DateProperty { get; set; } 
} 

당신은이 MVC 측면에서 메타 데이터의 수, 당신이 확인하고 메타 데이터를 제공 할 수있는 원래 클래스 인 것처럼 :

[ValidationAttribute(...)] 
[ValidationAttribute(...)] 
public class MyModelValidator 
{ 
    [Required] 
    [Display("My Integer")] 
    public int IntProperty { get; set; } 

    [DataType(DataType.DateTime)] 
    public DateTime DateProperty { get; set; } 
} 

마지막으로 Metadata/Validator 클래스를 해당 기본 클래스 (예 : Global.asax)에 연결하면됩니다.

protected void Application_Start() 
{ 
    AssociatedMetadataTypeTypeDescriptionProvider typeDescriptionProvider; 

    typeDescriptionProvider = new AssociatedMetadataTypeTypeDescriptionProvider(
      typeof(MyModel), 
      typeof(MyModelValidator)); 

    TypeDescriptor.AddProviderTransparent(typeDescriptionProvider, typeof(MyModel)); 

    // register other metadata classes 
} 

원하는 모든 엔티티에 대해이 작업을 수행 할 수 있습니다.

1

보기 모델을 사용하십시오. 의도 된 목적 중 하나는 뷰에서 MVC로 모델을 추상화하는 것입니다.

뷰 모델에 유효성 검증 속성을 넣고 자동 매퍼와 같은 매퍼를 사용하여 db 엔티티와 정보를 복사합니다.

컨트롤러 동작에 ModelState.IsValid을 사용하여보기 모델이 유효한지 확인하십시오.

내 POST 액션 방법은 일반적으로이 liek가 someting를 찾습니다

[HttpPost] 
public virtual ActionResult Edit(EditModel model) 
{ 
    if (!ModelState.IsValid) 
     return View(model); 

    try 
    { 
     // fetch db entity 
     var template = _templateService.Get(model.Id); 

     // copy info from view model to db entity 
     Mapper.Map(model, template); 

     // save db entity 
     templateService.Save(template); 

     return RedirectToAction("Details", new { id = template.Id }); 
    } 
    catch (Exception err) 
    { 
     Logger.Error("Failed to save template", err); 
     ModelState.AddModelError("", err); 
     return View(model); 
    } 
} 
관련 문제