将RedirectToAction与自定义类型参数一起使用

时间:2011-02-24 05:46:47

标签: asp.net-mvc-2

asp.net mvc 2

我在Identity controller中有这个动作

public ActionResult Details(string id, MessageUi message)
{

我正在尝试从另一个控制器重定向到此操作,但我不知道应该如何传递消息参数

我正在尝试

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

但是message参数为null

1 个答案:

答案 0 :(得分:8)

这是正常的。重定向时,您无法在URL中传递复杂对象,这就是未收到MessageUi对象的原因。只有标量属性将被转换为& - 在网址中分隔的键/值对。


一种可能性是传递此对象的所有简单属性,以便默认模型绑定器可以在目标位置重建它:

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类型的自定义模型绑定器大大完成。


另一种可能性是使用TempDataSession

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

然后在Details操作中:

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