Это нормально. Вы не можете передавать сложные объекты в 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,
});
Вы также можете передать только идентификатор сообщения:
var id = "someidvalue";
return RedirectToAction("Details", "Identity", new {
id = id,
messageId = "somevalue"
});
и восстановить объект сообщения в действии детали с использованием этого идентификатора:
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;