Je suis nouveau sur ASP.NET MVC. Après avoir longtemps travaillé avec le modèle ASP.NET traditionnel, il me faut du temps pour comprendre ce modèle. Je passe par NerdDinner pour comprendre comment les choses fonctionnent. Donc, j'ai un objet qui doit être passé à travers deux vues. Semblable à l'article NerdDinner Step 6: ViewData and ViewModel.Passage de données du contrôleur à la vue, retour au contrôleur, retour à la vue
Je conserve les données de Get to Post pour la première fois, puis je le place dans TempData et le passe à une autre action (AnotherAction). Une fois que je reçois mes données sur Get, je ne peux pas les conserver sur Post.
Voici mon code:
public class DinnerFormViewModel
{
public Dinner Dinner { get; private set; }
public DinnerFormViewModel(Dinner dinner)
{
Dinner = dinner;
}
}
public class DinnersController : Controller
{
public ActionResult Action()
{
Dinner dinner = new Dinner();
return View(new DinnerFormViewModel(dinner));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Action(Dinner dinner, FormCollection collection)
{
try
{
// Some code
TempData["Dinner"] = dinner;
return RedirectToAction("AnotherAction");
}
catch
{
return View();
}
}
public ActionResult AnotherAction()
{
Dinner dinner = (Dinner)TempData["Dinner"]; // Got my dinner object
return View(new DinnerFormViewModel(dinner));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AnotherAction(Dinner dinner, FormCollection collection)
{
// Lost my dinner object, dinner comes in as null
}
}
Réinitialiser TempData sur AnotherAction n'aide pas. Ma compréhension est que TempData est seulement bon après RedirectToAction. Quoi qu'il en soit, j'ai aussi essayé cette méthode, avec et sans RedirectToAction. Bien sûr, RedirectToAction entre dans une boucle infinie appelant la version Get d'AnotherAction et la définition de TempData sans RedirectToAction ne me donne rien. Par conséquent, j'utilise le DinnerFormViewModel. Si vous regardez le code, lors de ma première action (Get), je fais la même chose.Ici, je peux modifier l'objet Dinner comme je le souhaite et je récupèrerai le même objet Dinner sur Action (Post). – Sai
Jon, j'ai ajouté un exemple pour redéfinir TempData dans une autre action pour qu'il soit disponible pour la publication d'une autre action. Je suis capable de récupérer l'objet dîner de TempData avec succès. Cependant, étant donné que ma vue ne publie pas les variables de formulaire correctes dans AnotherAction, l'instance de dîner transmise à l'action est null. Pour info, je n'ai pas le projet de dîner nerd alors j'ai créé ma propre classe Dinner avec une seule propriété Name. –
Ce flipper fonctionne Aaron, incroyable! Vous savez, je pensais que j'avais déjà essayé, alors j'ai suivi vos pas avec mon projet actuel et ça n'a pas marché. Puis j'ai commencé un nouveau projet avec juste votre code et ça a marché là-bas, donc je savais que j'avais quelques erreurs mineures quelque part. Alors je me suis avéré être un idiot. Je vous remercie! – Sai