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
答案 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
类型的自定义模型绑定器大大完成。
另一种可能性是使用TempData
或Session
:
var id = "someidvalue";
TempData["message"] = new MessageUi("somevalue");
return RedirectToAction("Details", "Identity", new { id });
然后在Details操作中:
var message = TempData["message"] as MessageUi;