2011-02-24 6 views
3

asp.net mvc 2Utilisation de RedirectToAction avec le paramètre de type personnalisé

J'ai cette action dans le contrôleur Identity

public ActionResult Details(string id, MessageUi message) 
{ 

Et je suis en train de rediriger vers cette action d'un autre contrôleur, mais je n » sais comment dois-je passer le paramètre de message

Je tentais avec

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

mais le paramètre de message est nul

Répondre

8

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; 
+0

résolu avec liant modèle personnalisé, merci! –

Questions connexes