C'est normal. Vous ne pouvez pas passer des objets complexes dans des URL lors de la redirection et c'est la raison pour laquelle l'objet MessageUi
n'est pas reçu. Seules les propriétés scalaires qui seront traduites en &
- paires clé/valeur séparées dans l'URL.
Une possibilité serait de passer toutes les propriétés simples de cet objet pour que le liant modèle par défaut peut le reconstruire à l'emplacement cible:
var id = "someidvalue"
var message = new MessageUi("somevalue");
return RedirectToAction("Details", "Identity", new {
id = id,
MessageProp1 = message.MessageProp1,
MessageProp2 = message.MessageProp2,
MessageProp3 = message.MessageProp3,
});
Vous pouvez également passer seulement ID du message:
var id = "someidvalue";
return RedirectToAction("Details", "Identity", new {
id = id,
messageId = "somevalue"
});
et de faire reconstruire l'objet de message dans l'action details en utilisant t son id:
public ActionResult Details(string id, string messageId)
{
var message = new MessageUi(messageId);
...
}
et ce travail pourrait être fait grandement par un liant de modèle personnalisé pour le type MessageUi
.
Une autre possibilité serait d'utiliser TempData
ou Session
:
var id = "someidvalue";
TempData["message"] = new MessageUi("somevalue");
return RedirectToAction("Details", "Identity", new { id });
puis à l'intérieur de l'action Détails:
var message = TempData["message"] as MessageUi;
résolu avec liant modèle personnalisé, merci! –