2011-01-06 3 views
5

ViewModel을 사용하는 폼보기가 있습니다. 새 뷰는 "새로 만들기"작업에 의해 렌더링됩니다. 이 양식이 제출되면 정보를 "추가"작업으로 되돌려 보냅니다.ASP.Net MVC 반환 작업에 리디렉션을 사용하는 대신 모델의 새 인스턴스로보기

DB에 대한 모든 작업이 성공적으로 수행되면보기를 새로 고침하고 싶습니다. "Add"액션 내부에서 viewmodel의 새 인스턴스를 만들고 View ("New", viewModel)를 반환합니다. 이건 내 견해를 새롭게하지 않습니다. 제출 된 모든 이전 값은 뷰에 남아 있습니다. RedirectToAction 메서드없이 페이지를 새로 고치는 방법이 있습니까?

다른 게시물에서 나는 바람직하지 않은 결과를 가져올 수 있으므로 ModelState.Clear를 사용하면 안됩니다.

, 당신을 감사

편집 1 - 코드 추가는 값

New 

public ActionResult New(string id) 
     { 
      var sysId= new Guid(id); 
....... 
........ 

    string Details = pDto.Name + "(" + pDto.Code + ")"; 

      var vm= new ViewModel(id); 
      vm.Details = Details; 

      return View(vm); 
     } 



public ActionResult Add(ViewModel vm) 
     { 
         ViewModel vm= vm; 

      if (ModelState.IsValid) 
      { 

           var dto= _qRepository.GetFeaturesBy(viewModel.Code); 

       if (dto!= null) 
       { 

        ModelState.AddModelError("Code", "Code is already in Use."); 

        return View("New", viewModel); 
       } 

       _productService.AddFeature(..........); 
       // ModelState.Clear(); -- this works   
       vm= new ViewModel(vm.pId) { Message = "Code" + viewModel.Code + " was added ......", Details = vm.Details }; 

      } 


      return View ("New", vm); 

     } 
+0

현재 수행중인 작업에 대한 코드를 게시 할 수 있습니까? –

+0

코드를 게시했습니다 - – TheMar

답변

5

post-redirect-get 패턴을 준수해야합니다. 게시가 실패하고 유효성 검사 오류를 반환하여 클라이언트가 양식을 다시 게시 할 수있는 경우에만 대기하지 않습니다. 이것은 포스트 액션 메소드에서 뷰를 반환 할 때 발생합니다. 이 모든 폼 값은 여전히 ​​폼에서 다시 사용되기를 기다리는 ModelState에서 계속 나타납니다.

사용자가 다른 항목을 바로 추가 할 수있게하려면 RedirectToAction("New")을 사용할 수 있습니다. 또한 두 작업 모두 New으로 이름을 지정한 다음 [HttpPost] 특성과 PostModel 매개 변수를 사용하여 게시 버전을 꾸미면됩니다. 두 가지 다른 작업 사이에 게시하고 가져 오는 경우 상황이 엉망이됩니다. HTML 양식에 명시 적으로 작업을 설정하고 유효성 검사 실패에 대한 올바른보기를 반환해야한다는 것을 기억해야하기 때문입니다.

+0

이것은 내 첫 MVC 프로젝트로서 최선의 방법을 고수하고 포스트 리디렉션을하고 싶습니다. 고맙습니다 – TheMar

0

그것은 렌더링되어 가득 속성, 또는 브라우저는 "자동 채우기는"형식인가?

RedirectToAction은 302 응답을 생성 한 다음 새 양식에 새 "가져 오기"를 발생시킵니다.

+0

처음으로 인스턴스화 될 때 일부 값이있는 View Model을 채우고 동일한 값에 대해 다시 쿼리하지 않으려합니다. 그래서 새로운 액션으로 이동하지 않고 새로운 "뷰 모델"에 게시 된 뷰 모델의 매개 변수를 채우려는 것입니다. – TheMar

4

모델을 새로 고칠 예정입니다.

문제는 HTMLHelpers가 전달한 새 모델을 사용하기 전에 ViewState 및 ModelState에서 데이터를 먼저 찾습니다.

ModelState를 지우거나 직접 ModelState 항목을 직접 변경하는 것은 거의 불가능합니다.

+0

Clear 메소드를 사용하는 것이 안전할까요? 그것은 내가 필요한 것을 해낸다. – TheMar

+0

적절한 때에 사용할 수 있습니다. – jfar

관련 문제