2012-08-27 3 views
0

나는 내 모델에서 다음 등록했다 : 나는검증을 피하기 위해 컨트롤러 모델을 업데이트하려고

[Display(Name = "ActivityModel_FlashFile", ResourceType = typeof(App_GlobalResources.Models))] 
[Required(ErrorMessageResourceName = "ActivityModel_FlashFile_Required", ErrorMessageResourceType = typeof(App_GlobalResources.Models))] 
public string FlashFile { get; set; } 

그리고 내 컨트롤러에서 작업을 수행합니다 우리가 얻을 때

ModelState.Remove("FlashFile"); 
model.FlashFile = "1"; 
try 
{ 
    this.UpdateModel(model); 
} 
catch (Exception ex) 
{ 
    string allErrors=string.Join(",",ModelState.Values.SelectMany(v => v.Errors).Select(e=>e.ErrorMessage)); 
... 

(FlashFile이 비어 이 스 니펫의 시작 부분까지).
아직까지 allErrors은 "플래시 파일이 필요합니다"입니다.

(나는 이것을 here에서 수행하는 아이디어를 가졌습니다).

FlashFile 속성의 유효성을 검사하지 않으려면 어떻게해야합니까?

+0

왜 당신이 방금 필수을하지 않는 FlashFile 속성? – podiluska

+0

어떤 경우에는 (원래 IF 문에 FlashFile에 "인공"값을 할당하지만, 그 질문을 단순화했습니다). 또한 클라이언트 측 유효성 검사를 위해 –

+0

이 필요하면 상황이 ViewModel 패턴에 가장 적합합니다 (자세한 내용은 여기를 참조하십시오 : http://dotnet.dzone.com/articles/model-view-viewmodel-design) – robasta

답변

0

FlashFile 속성의 유효성을 검사하지 않으려면 어떻게해야합니까?

이보기의 요구 사항에 맞게 조정 된보기 모델을 사용합니다. 그것이 올바른 방법입니다. FlashFile 속성이 필요하지 않은 경우이 작업에 대해 Required 특성이없는 뷰 모델을 디자인하십시오.

이 접근하는 잘못된 방법은 도메인 모델을 재사용하려고 시도하고 바인딩이 모델에서 원하지 않는 속성을 제외하는 것입니다 :

try 
{ 
    this.UpdateModel(model, null, null, new[] { "FlashFile" }); 
    model.FlashFile = "1"; 
} 
catch (Exception ex) 
{ 
    string allErrors = string.Join(
     ",", 
     ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage) 
    ); 
    ... 
} 
+0

놀랍게도, 이것은 똑같은 오류를줍니다. 그게 가능할지 모르겠다. (그리고 새로운 모델을 만들 때 - 유효성 검사는 (현재) 서버 측이 새로운 뷰나 그와 비슷한 것을 전송하는 것을 포함하지 않는) 사용자 선택에 달려있다. –

관련 문제