2011-02-24 5 views
3

의 asp.net MVC 2사용 RedirectToAction

내가 신원 컨트롤러에서이 작업을

public ActionResult Details(string id, MessageUi message) 
{ 

그리고 다른 컨트롤러에서이 조치로 리디렉션하기 위해 노력하고있어,하지만 난 돈 ' t 내가 메시지 매개 변수를 전달하는 방법을 알고

내가 함께 노력했다

var id = "someidvalue" 
    var message = new MessageUi("somevalue"); 
    return RedirectToAction("Details", "Identity", new { id, message}); 
} 

이지만 메시지 매개 변수는 null입니다.

답변

8

정상입니다. 리디렉션 할 때 URL에 복잡한 객체를 전달할 수 없으므로 MessageUi 객체가 수신되지 않습니다. URL의 & - 분리 된 키/값 쌍으로 변환되는 스칼라 속성 만

var id = "someidvalue" 
var message = new MessageUi("somevalue"); 
return RedirectToAction("Details", "Identity", new { 
    id = id, 
    MessageProp1 = message.MessageProp1, 
    MessageProp2 = message.MessageProp2, 
    MessageProp3 = message.MessageProp3, 
}); 

또한 단지를 전달할 수 : 기본 모델 바인더가 대상 위치에 그것을 재구성 할 수 있도록


하나의 가능성이 개체의 모든 단순 속성을 통과하는 것 메시지 ID :

var id = "someidvalue"; 
return RedirectToAction("Details", "Identity", new { 
    id = id, 
    messageId = "somevalue" 
}); 

메시지 개체가 세부 동작에서 재구성되고 있습니다. 그의 ID :

public ActionResult Details(string id, string messageId) 
{ 
    var message = new MessageUi(messageId); 
    ... 
} 

이 작업이 크게 MessageUi 유형에 대한 사용자 정의 모델 바인더에 의해 수행 될 수있다.


또 다른 가능성은 TempData 또는 Session을 사용하는 것입니다 : 세부 동작 내부

var id = "someidvalue"; 
TempData["message"] = new MessageUi("somevalue"); 
return RedirectToAction("Details", "Identity", new { id }); 

다음 :

사용자 정의 모델 바인더를 해결
var message = TempData["message"] as MessageUi; 
+0

, 감사합니다! –

관련 문제