2011-02-24 22 views
3

asp.net的MVC 2使用RedirectToAction與自定義類型參數

我有這個動作識別控制器

public ActionResult Details(string id, MessageUi message) 
{ 

我試圖重定向到來自另一個控制器的這個動作,但我不」知道我應該如何傳遞消息參數

我,試圖

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

但消息參數爲空

回答

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" 
}); 

並且使用t中的細節動作重構消息對象他的ID:

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

和這項工作可以通過爲MessageUi類型的定製模型綁定大大完成。


另一種可能性是使用TempDataSession

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

,然後詳細的行動中:

var message = TempData["message"] as MessageUi; 
+0

自定義的模型綁定解決了,謝謝! – 2011-02-24 16:39:27

相關問題