2009-05-17 2 views
2

Je suis en train de rassembler un assistant comme une application Web qui prendra en entrée dans un formulaire et rediriger conditionnellement à une page de confirmation si l'élément entré existe déjà. Quelque chose dans le sens deControlling Controller Action Ordre d'appel

"il y a déjà un produit dans le système avec ce nom êtes-vous sûr de vouloir continuer?".

Je peux avoir une action "Confirmer" sur mon contrôleur pour cela mais cette action ne devrait être appelée que par l'action "Ajouter" initiale.

Ma question est, quelle est la meilleure façon de contrôler l'ordre d'appel de l'action du contrôleur. Évidemment, quelqu'un pourrait entrer dans le // Confirmer l'URL et usurper les données.

J'espère que j'ai du sens.

Merci,

Répondre

3

Vous voulez que l'utilisateur confirme quelque chose parfois, non?

Si oui, soumettre le formulaire à l'action de confirmation; puis

public ActionResult Confirm(MyObject mObj, string confirmButton) 
{ 

    if(NotAlreadyExists(mObj) || confirmButton) 
     return RedirectToAction("Create", mObj) 
    else 
    { 
     ModelState.AddModelError("DuplicateProduct","Please confirm"); 
     ViewData["showConfirm"] = true; 
     return View(mObj); 
} 
} 

Ofourse, alors vous avez à peine besoin d'une action spéciale, comme vous pouvez simplement placer votre datacontext créer le code au lieu du RedirectToAction, mais peu importe ...

La vue devra alors chercher showConfirm et affichez le message + le bouton de confirmation.

1

Vous ne pouvez pas contrôler l'ordre d'appel d'action du contrôleur.

Vous pouvez, cependant, promouvoir ce concept à quelque chose que vous codez dans votre application.

Je peux penser à plusieurs façons de s'assurer qu'un visiteur a vu une étape avant l'autre: état de session, cookies, passage d'un jeton d'action à action, et tempdata dans asp.net mvc. TempData va être plus facile, je parie, si vous voulez juste frapper cette fonctionnalité.

Avoir ajouter mettre une valeur spéciale dans TempData avant qu'il redirige à confirmer. Si Confirm ne voit pas cette valeur dans TempData, il retourne à Add. Si c'est le cas, Confirm fait son travail normal.

Questions connexes