2010-07-19 4 views
0

나는 NHibernate를 사용하고 있는데, Campaign 클래스를 가지고 있는데,이 클래스는 Client 클래스를 멤버 중 하나로 가지고 있으며, [HttpPost] public Create (CreateCampaignViewModel vm) 메서드에서 ModelState.IsValid을 사용하려고 시도하고있다. 내가 양식 대신 전체 Client 개체에서 Client.Id을 통과하고있어 나의 뷰 모델 객체 CampaignModelStats.IsValid를 포함으로복잡한 개체에 ModelState.IsValid를 사용하는 방법은 무엇입니까?

은 항상 false입니다.

ModelState.IsValid을 설정하는 유효성 검사 코드를 실행하기 전에 클라이언트 구성원을로드하는 방법이 있습니까? 또는 ClientId를 기반으로 클라이언트 개체를 검색하고 캠페인에 바인딩 한 후 '수동으로'ModelState 상태를 새로 고치는 방법이 있습니까?

답변

1

당신은 아마 이드의 바인딩을 사용하지 않도록 작업 메서드의 매개 변수에 속성을 추가 할 :

[HttpPost] 
public Create([Bind(Ignore="ClientId")]CreateCampaignViewModel vm) 
0

하면 컨트롤러의 UpdateModel 방법에 오버로드 중 하나를 사용하십시오. 그런 다음 ModelState.IsValid를 호출하십시오.

0

SharpArch는 NH 개체를로드 할 수있는 모델 바인더가 있다고 생각합니다. 그러나 나는 그 생각을별로 좋아하지 않는다. 대신 게시 된 폼 값을 유지하기 위해 별도의 PostModel을 사용한다. ViewModel을 다시 사용하여 게시물 데이터를 보유하는 경우 대개 게시 할 의미가없는 필드 (예 : Client 객체) 또는 읽기 전용으로 표시되는 필드가 많습니다.

당신이해야 할 일은 양식 입력 이름과 속성 이름을 일치시키고 사후 조치 방법에 매개 변수로 추가하기 만하면됩니다.

관련 문제