2011-02-03 2 views
2

컨트롤러가 두 개 있습니다 (AliceControllerBobController). 각각 Index 조치 방법이 포함되어 있습니다. 다음과 같이 뷰 모델은 간단하다 :강력한 형식의 뷰 모델을 다른 동작 메서드로 리디렉션하고 전달하는 방법은 무엇입니까?

class Foo{[Required]public int data{get;set;}} 

어떻게 밥 앨리스에서 강력한 형식의 개체를 전달할?

class AlliceController: Controller 
{ 

    [HttpPost] 
    public ActionResult Index(Foo foo) 
    { 
     if(ModelState.IsValid) 
     { 
      // I want to pass foo to Bob's Index. How to do it? 
      return RedirectToAction("Index","Bob"); 
      } 
     else return View(); 
    } 
} 

답변

4

이론에서, 당신은 RouteValueDictionary 매개 변수 RedirectToAction에 사용할 수있는 매개 변수 이러한 유형의 리디렉션을 통해 GET url에 고정시킬 수있는 기본 유형 (int, string , 등).

대신 TempData을 사용하십시오.

그런데, 나는 당신이 무엇을하려고하는지 전혀 모른다.

일부 우려 :

  • 가 왜 그냥 대신 전체 뷰 모델의 실제 값을 전달?
  • 왜 컨트롤러간에 리디렉션하고 있습니까? (이 작업은 수행 할 수 있습니다. 시나리오에 대한 이유는 알 수 없습니다.)
+0

제 시나리오에서는 일반적인 '확인'보기가 필요합니다. 이'Confirmation' 뷰는'ConfirmationController'의'Confirmation' 액션 메소드와 연관되어 있습니다. 'Confirmation' 뷰는 강하게 타입 화 된 모델'IMyModel'이 확인을 위해 표시되도록합니다. 다른 컨트롤러는 IMyModel을 구현하는 모델의 트랜잭션과 관련이 있습니다. "Post-Redirect-Get"패턴을 사용하고 싶습니다. 리다이렉트 (redirect)는 애플리케이션의 모든 트랜잭션에 대해 확인이 수행됩니다. – LaTeX

+0

@Stack Overflow - PRG를 사용하는 것이 좋습니다. 지금 귀하의 시나리오를 이해합니다. 나는 여기에 TempData를 사용하는 것이 더 좋다고 생각합니다. – RPM1984

1

BobController를 인스턴스화하고 Foo에서 전달하는 인덱스 메소드의 결과를 반환 할 수 없습니까?

1

리디렉션을 통해 강력한 형식의 개체를 전달할 수 있는지 확실하지 않습니다. *

그러나
return RedirectToAction("Index", "Bob", new { param = value }); 

, 당신은 객체를 전달할 수 없습니다 :

대신 전달할 수는

RedirectToAction(new RouteValueDictionary( 
    new{ 
      controller = "Blah", 
      action = "Blah", 
      foo = "Bar" 
    } 
)); 
관련 문제