Utilisation correcte de TempData dans ASP.NET MVC3?

J’ai une application ASP.NET MVC3 dans laquelle mon action génère une liste d’identifiants que je souhaite mettre à la disposition d’une requête AJAX ultérieure. Cela permet de lancer un long processus en arrière-plan et d’interroger le processus. La liste des identifiants est l’entrée nécessaire à ce long processus. Je ne veux pas les transmettre à l’URL en tant que paramètre, car la liste pourrait potentiellement être très longue et causer des problèmes dans IE.

Mon contrôleur

public ActionResult Run() { List objs = _db.MyObjs.ToList(); ssortingng uniqueId = Guid.NewGuid().ToSsortingng(); ViewData["UniqueID"] = uniqueId; TempData["ObjIdList" + uniqueId] = Ssortingng.Join(",", objs .Select(o => o.ObjID).ToArray()); return View(objs); } public void StartProcess(ssortingng uid) { ssortingng ids = TempData["ObjIdList" + id].ToSsortingng().Split(','); ... } 

Mon avis

 var uniqueId = '@ViewData["UniqueID"]'; $(document).ready(function (event) { $('#startProcess').click(function () { $.post("/Scheduler/StartProcess", { uid: uniqueId }, function () { getStatus(); }); event.preventDefault; }); }); function getStatus() { var r = new Date().getTime(); // cache killer for IE var url = '/Scheduler/GetCurrentProgress/' + uniqueId + "?r=" + r; $.get(url, function (data) { if (data != "100") { $('#status').html(data); setTimeout(function () { getStatus(); }, 100); } else { $('#status').html("Done"); }; }); } 

Cela fonctionne dans mon test initial, bien que sur mon ordinateur portable avec un utilisateur simultané. Est-ce sécuritaire ou existe-t-il un meilleur moyen de transmettre ces données?

Brandon

TempData ressemble à ViewData, sauf qu’il persiste pendant deux requêtes successives, ce qui le rend utile pour des opérations telles que le transfert de données entre deux actions de contrôleur différentes.

Jason C

TempData dans MVC persiste jusqu’à ce qu’il soit récupéré. En tant que FYI, Tempdata est actuellement stocké dans un SessionState d’utilisateur, il ressemble donc davantage à SessionData qu’à ViewData.

Tiré de l’une de mes réponses à des questions – Contrôleur MVC3 Action Résultat “Mémoriser” ID transmis

TempData est essentiellement une propriété de session – (stockée dans l’état de session) utilisée pour la communication entre deux requêtes successives adressées au contrôleur. Comme si c’est une bonne ou une mauvaise pratique dans votre cas, je pense que ce serait parfaitement bien de transmettre des données à la tempdata, mais il existe d’autres options, notamment des champs cachés. Un autre bon lien à regarder est ASP.NET MVC – TempData – Bonne ou mauvaise pratique

La durée de vie de TempData est très courte. De la requête en cours à la requête suivante. TempData utilise Session pour stocker les données en arrière-plan. Mais la durée de vie est plus courte que la variable de session normale, c’est-à-dire jusqu’à la demande suivante.

Si vous êtes certain de passer l’appel ajax juste après l’appel précédent dans lequel vous avez défini TempData, vous pouvez l’utiliser. Si vous voulez plus de contrôle, vous pouvez la conserver dans la variable Session et la détruire après l’avoir utilisée n fois.

Utilisez TempData uniquement lorsque vous souhaitez transmettre des valeurs entre des contrôleurs dans ASP .NET MVC.