2017-01-12 1 views
0

Dans la fenêtre de paiement Lorsque le client clique sur le bouton de paiement, je veux démarrer un minuteur. Et si le traitement des paiements prend plus de 5 secondes, je veux rediriger vers une page. Voici ce que je pouvais penser.Régler la minuterie dans le site Web ASP.net mvc

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult SavePayment(PaymentFormMV data) 
     { 
      if (Session["startTime"] == null) 
      { 
       Session["startTime"] = DateTime.Now; 
      } 

      var ticksRemaining = DateTime.Now - (DateTime)Session["startTime"]; 
      int x = int.Parse(ticksRemaining.ToString()); // Format Unhandled exception 
      if(x == 5) 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
      // Payment Logic Here to 3rd Party API 
      return View("PaymentConfirmation", returnData); 
} 

Mais cela ne fonctionne pas comme prévu lorsque je calcule ticksRemaining. Ai-je besoin de quelque chose ou quelque chose ici? Je suis nouveau au développement s'il vous plaît me guider. Je veux juste voir la durée entre le clic du bouton et l'heure actuelle. Si elle traverse 5 secondes, je veux rediriger l'utilisateur vers une nouvelle page.

+0

Qu'est-ce que l'exception est-il lançaient? Pourquoi ne pas le faire comme quelque chose sur le client où la page demande une redirection? Cependant, avec l'une ou l'autre solution, vous n'arrêterez pas l'exécution d'une tâche longue. La façon dont vous l'avez configuré maintenant, l'utilisateur devrait cliquer deux fois sur le bouton pour que quelque chose fonctionne. – krillgar

+3

"Je reçois l'exception" - pensez-vous que l'inclusion d'au moins un message d'exception dans votre question serait utile? – Igor

+0

@krillgar: Je suis débutant en train d'apprendre. Pouvez-vous me guider s'il vaut mieux le faire du côté client. Si oui, pouvez-vous fournir un lien? Et j'ai édité mon code. Apparemment, mon approche n'est pas correcte. – Unbreakable

Répondre

2

Il est beaucoup plus raisonnable de l'implémenter côté client. Vous pouvez utiliser JavaScript. Par exemple, cela pourrait vous aider:

Page Redirect after X seconds wait using JavaScript

JQuery Redirect to URL after specified time

+0

Dois-je mettre ce code dans mon fichier cshtml sous le tag de script? – Unbreakable

+0

Oui vous pouvez, mais la meilleure pratique consiste à faire un nouveau fichier javascript, puis le référencer dans le fichier cshtml – MacakM

+0

Dans le lien que vous avez mentionné tout est basé sur le chargement de la page. Mais pour moi, la minuterie devrait commencer à cliquer sur le bouton. Aussi, pour indiquer l'évidence je voudrais que le bouton clique pour effectuer son opération normale de POST juste comme MVC et frappe la fonction de contrôleur. – Unbreakable

1
TimeSpan ticksRemaining = DateTime.Now - (DateTime)Session["startTime"]; 
int x = ticksRemaining.TotalSeconds;