2009-08-07 5 views
0

Je développe demande d'examen en ligne en utilisant asp.net, dans la page d'examen de début j'ai créé un compte à rebours javascript, comment puis-je passer à la page suivante automatiquement après la minuterie atteint 00 et voici mon codejavascript timer

Long timerStartValue = 1000;

private int TimerInterval 
{ 
    get 
    { 
     int o =(int) ViewState["timerInterval"]; 
     if(o==0) 
     { 

      return (o); 
     } 
     return 50 ; 
    } 
    set 
    { 
     ViewState["timerInterval"] = value; 

    } 
} 

protected void Page_PreInit(object sender,EventArgs e) 
{ 
    string timerVal = Request.Form["timerData"]; 
    if(! String.IsNullOrEmpty(timerVal)) 
    { 
     timerVal = timerVal.Replace(",", String.Empty) ; 
     this.timerStartValue = long.Parse(timerVal); 

    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(! IsPostBack) 
    { 
     this.timerStartValue = 10000; //3599000;//14400000; 
     this.TimerInterval = 500; 
    } 
} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    this.timerStartValue = 3599000; 
} 

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    System.Text.StringBuilder bldr=new System.Text.StringBuilder(); 
    bldr.AppendFormat("var Timer = new myTimer({0},{1},'{2}','timerData');", this.timerStartValue, this.TimerInterval, this.lblTimerCount.ClientID); 
    bldr.Append("Timer.go()"); 

    ClientScript.RegisterStartupScript(this.GetType(), "TimerScript", bldr.ToString(), true); 
    ClientScript.RegisterHiddenField("timerData", timerStartValue.ToString()); 
} 

Merci à l'avance sangita

Répondre

0

Il semble que lorsque vous cliquez sur le bouton « Suivant », vous chargez une toute nouvelle page. Cela change bien sûr tout le contenu et réinitialise tout le javascript. Vous ne pouvez pas maintenir l'état sur plusieurs pages sans un peu de travail.

La solution à ce problème pourrait être de sauvegarder l'état de la minuterie lorsque le bouton suivant est enfoncé, et de passer à l'étape suivante. Vous pouvez le faire en sauvegardant l'état du minuteur dans une entrée de formulaire cachée et en le soumettant avec le bouton Suivant.

L'autre option serait de charger vos questions via AJAX. Au lieu de passer à une nouvelle page à chaque fois que vous cliquez sur le bouton suivant, vous pouvez simplement remplacer la partie de la question par une nouvelle question et laisser la minuterie intacte. C'est probablement la solution que j'utiliserais.

0

Rechargez-vous toute la page en cliquant sur le bouton suivant? Cela peut conduire à redéfinir le fichier de script Java. Ainsi, les valeurs des variables seront réinitialisées. Vous pouvez penser à afficher les questions/réponses via Ajax. Vous n'avez pas besoin de recharger la page entière lorsque vous affichez la question suivante. le quiz ne sera mis à jour que si vous pouvez également gérer les variables globales dans votre script java. Consultez le lien ci-dessous pour connaître la mise à jour partielle de la page à l'aide de jQuery.

http://www.west-wind.com/presentations/jquery/jquerypart2.aspx

Hope this helps.

0

Vous pouvez mettre le minuteur dans un iframe si vous ne pouvez pas vous débarrasser de la publication.

0

Vous avez besoin d'un moyen de conserver l'information entre les pages, et il n'y a qu'une seule possibilité: faire partie de la demande de page suivante.

Maintenant, cela pourrait être divisé en 2 catégories:

1) Dans le cadre de l'URL: http://www.example.com/page?timer=123;

2) Dans le cadre des en-têtes;

Et le numéro 2 ouvre de nouvelles possibilités:

a) Dans le cadre des données POST; B) En tant que cookie côté client seulement;

c) en tant que cookie lié aux informations sur le serveur;

Les numéros 1, 2a et 2b peuvent être manipulés par l'utilisateur. Donc, ce que vous pouvez faire est de stocker une valeur dans un cookie, un hachage par exemple ou un ID de ligne de base de données, que vous utiliserez pour récupérer des informations sur le serveur.

tl; dr? Utilisez un asp "Objet de session". Il vous permet de garder les choses sur le serveur et les utilisateurs n'auront aucune idée de ce qu'ils sont.