4 votes

MVC3 - Problème pour passer int[] à l'action du contrôleur sur RedicrectToAction à partir d'une action différente

J'ai deux actions dans le même contrôleur.

public ActionResult Index(string filter, int[] checkedRecords)

y

public ActionResult ExportChkedCSV(string filter, int[] checkedRecords)

La deuxième action (ExportChkedCSV) contient cette redirection :

if (reject != 0)
        {
            return RedirectToAction("Index", new { filter, checkedRecords });
        }

Lorsque je progresse, le paramètre checkedRecords est correctement renseigné dans l'instruction RedirectToAction, mais lorsqu'il atteint le résultat de l'action Index à partir de là, checkedRecords est nul. J'ai essayé de faire filter =, checkedRecords =, etc. Je n'ai aucun problème avec cela entre la vue et le contrôleur. Si je change le type de tableau en n'importe quoi d'autre, je peux récupérer la valeur - comment passer int[] d'une action à l'autre ? Qu'est-ce que je fais de travers ? Je vous remercie de votre attention.

6voto

CD Smith Points 6527

Il n'est pas possible d'envoyer des types complexes en tant que paramètres de redirection dans MVC, mais seulement des types primitifs tels que les nombres et les chaînes de caractères.

Utiliser TempData pour transmettre le tableau

...
if (reject != 0) {
    TempData["CheckedRecords"] = yourArray;
    return RedirectToAction("Index", new { filter = filterValue });
}
...

public ActionResult Index(string filter) {
    int[] newArrayVariable;
    if(TempData["CheckedRecords"] != null) {
        newArrayVariable = (int[])TempData["CheckedRecords"];
    }
    //rest of your code here
}

1voto

Travis J Points 28588

Vous envoyez deux valeurs nulles. Lorsque vous utilisez new {}, vous créez un nouvel objet. Vous devez non seulement définir les noms des index, mais aussi les valeurs.

return RedirectToAction("Index", new { filter = filter, checkedRecords = checkedRecords });

1voto

Ant P Points 12459

Je ne suis pas sûr qu'ASP.Net sache comment construire une URL en utilisant le tableau d'int que vous passez. Si le tableau d'int identifie de manière unique une ressource, vous pouvez essayer de convertir le tableau en une chaîne de caractères délimitée par des tirets (ou similaire), puis d'analyser la chaîne de caractères dans la méthode Index.

Si vous essayez simplement de conserver les données entre les requêtes, utilisez TempData :

http://msdn.microsoft.com/en-us/library/system.web.mvc.controllerbase.tempdata.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X