2013-06-07 9 views
3

안녕하세요, 저녁이나 밤모델 상태가 이미있는 동안 값을 모델 상태에 추가하는 방법은 무엇입니까? MVC3

ModelState의 기존 키에 값을 어떻게 추가 할 수 있는지 궁금합니다. 여기에 내가 아직 한 것입니다 :

[HttpPost] 
    public ActionResult Create(VM_RoleGroup vm_roleGroup) 
    { 
     RoleGroup roleGroups = Mapper.Map<VM_RoleGroup, MAHAL_E_MA_Model.POCO.RoleGroup>(vm_roleGroup); 
     roleGroups.ModifiedDate = UtilityHands.GeneralTools.ConvertToShamsi(DateTime.Now); 
     roleGroups.Description = vm_roleGroup.Description ?? MAHAL_E_MA_Proj.ApplicationResources.GeneralResource.NoDescription; 

     **if (ModelState.ContainsKey("ModifiedDate") && ModelState["ModifiedDate"].Value == null) 
     { 
      ModelState["ModifiedDate"].Value = new ValueProviderResult("", roleGroups.ModifiedDate, CultureInfo.CurrentUICulture);  
     } 
     else if (!ModelState.ContainsKey("ModifiedDate")) 
     { 
      ModelState.Add("ModifiedDate", new ModelState { Value = new ValueProviderResult("", roleGroups.ModifiedDate, CultureInfo.CurrentUICulture) }); 
     }** 

     if (ModelState.IsValid) 
     { 
      unitOfWork.RoleGroupRepository.InsertData(roleGroups); 
      unitOfWork.RoleGroupRepository.Save(); 
      return RedirectToAction("Index"); 
     } 

     return View(vm_roleGroup); 
    } 

하지만라는 키의 값이 부족하기 때문에 ModelState은 여전히 ​​유효 'ModifiedDate'. 값은 클라이언트 측에서 사용자가 설정하지 않음을 기억하십시오. 프로그래밍 방식으로 설정해야합니다. 그런데 'ModifiedDate'는 이고 데이터베이스에는 필드가 필요합니다.

어떤 아이디어가 탄원합니까? 미리 감사드립니다.

+0

ViewModel에 ModifiedDate 필드가 있습니까? 키가 없으면 왜 모델 상태가 유효하지 않다고 생각합니까? – user1778606

+0

@ user1778606 : 예, ViewModel에 속성이 있습니다. 실제로 ModelState에는 키가 있지만 값이 없습니다. 증서에서, 나는 사용자가 그것을 책임지지 않기 때문에, 나는 ModifiedDate를 View에서 Controller로 전달하지 않을 것이다. 하지만 지금은 그 일을해야하고 Date를 HiddenField 또는 이와 비슷한 것으로 전달해야한다고 생각합니다. 그렇게 생각하지 않아? – user2394196

+0

나는 이것이 문제를 치유하는 가장 쉬운 방법이라고 생각한다. 서버에 다시 도착하면 수정 한 날짜를 덮어 씁니다. – user1778606

답변

1

ModifiedDate를 viewmodel의 일부로 전달한 다음 컨트롤러의 DateTime.Today에 덮어 씁니다.

즉. 그것을보기

@Html.Hidden(Model.ModifiedDate,DateTime.Today); 

를 미리 채우는이 isn'tsecure 때문에, (모든 모델) 전체 응용 프로그램에 걸쳐 보편적 필드 컨트롤러

roleGroups.ModifiedDate = DateTime.Today; 

또는 그 경우 덮어 쓰기, 당신은 실제로 추가 할 수 있습니다 매퍼에서이 작업을 수행하는 사용자 정의 코드가 있지만 상황이 확실하지 않습니다.

+0

좋은 생각 같네요! 나는 그것을 밖으로 시도하고 결과와 함께 돌아올 것입니다. 고맙습니다. – user2394196

+0

내가보기에 제안한 코드를 정확하게 작성했습니다. 'Model.ModifiedDate'와 관련된 오류가 발생합니다 : '값은 null 일 수 없습니다'. 데이터가 아직 삽입되지 않았으므로 빈 값이 모두있는 것이 옳습니다. 그런 다음 'DateTime.Today'가 생략되어 제대로 작동하고 '만들기'보기가 표시되었습니다. 그러나 '저장'버튼을 누르면 게시물이없는 것처럼 보입니다. 나는 이유를 모른다! 어쨌든 .. 내 관심에 대해 나는 'ModelState.IsValid'를 무시하고 일부 사용자 정의 유효성 검사를 작성하기로 결정했습니다. ( – user2394196

+0

흠, 나는 그것에 대해 duuno에 대해 모델 상태를 사용하는 것이 일반적으로 효과적인 방법입니다 (코드 및 유지 관리가 적음). 행운을 빈다. – user1778606