2010-02-05 5 views
0

J'ai un site Web qui, sur une personne qui va à elle, il vérifie un horodatage sur la base de données. Si l'horodatage date de plus de 4 heures, il ouvre une fenêtre contextuelle qui exécute un sous-registre d'importation/de mise à jour de base de données qui met à jour la base de données. Puis se ferme ensuite. Le raisonnement pour le faire de cette façon est qu'il permet à la personne qui navigue de continuer à faire des affaires alors qu'une fenêtre distincte s'occupe de la mise à jour.fenêtre ouverte derrière le navigateur

À l'heure actuelle, cette fenêtre contextuelle apparaît en tant que mise au point. Y a-t-il un moyen de faire en sorte que le chargement de la popup derrière la fenêtre du navigateur actuel ne fasse pas intrusion dans la navigation des utilisateurs?

Voici le sous-menu page_load de la fenêtre principale.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     Dim connStr As String = ConfigurationManager.ConnectionStrings("SNA_TRT").ConnectionString 
     Dim sqlConn As SqlConnection 
     sqlConn = New SqlConnection(connStr) 

     sqlConn.Open() 

     Dim strSQL As String = "SELECT TOP 1 [ID], [LASTREFRESH], [BYWHO] FROM [TRT_db_timer] ORDER BY [ID] Desc " 
     Dim cmd As New SqlCommand(strSQL, sqlConn) 
     Dim dr As SqlDataReader = cmd.ExecuteReader() 

     Dim lastupdate As DateTime 
     Dim currenttime As DateTime = Now() 

     While dr.Read() 
      lastupdate = Convert.ToDateTime(dr(ClearNullDs("LASTREFRESH"))) 
     End While 
     dr.Close() 
     sqlConn.Close() 

     Dim ts As TimeSpan = currenttime.Subtract(lastupdate) 
     Dim dbspan As String = ts.TotalMinutes.ToString() 

     Dim dsinceup As Integer = ts.Days.ToString + 1 

     'MsgBox(lastupdate) 
     'MsgBox(currenttime) 
     'MsgBox(dbspan) 

     If dbspan > 240 Then 
      bodytag.Attributes.Add("onload", "window.open('/trt/admin/importnotice.aspx?DAYS=" & dsinceup & "',null,'height=150, width=350,status=yes, resizable=no, scrollbars=no, toolbar=no,location=no,menubar=no ');") 
     End If 
    End If 
End Sub 
+0

Qu'en est-il en utilisant AJAX? – Malfist

+1

Qu'en est-il de l'utilisation de CRON? – Malfist

Répondre

1

Si vous voulez que la mise à jour se produise lorsque l'utilisateur arrive sur le site, utilisez AJAX ou un iframe masqué. Si vous souhaitez que la mise à jour se produise toutes les X heures, peu importe si l'utilisateur visite le site, utilisez un travail CRON. Ouvrir une fenêtre pour le faire va aggraver l'utilisateur.

+0

Je pensais à un cadre caché mais si la mise à jour est lancée et que l'utilisateur accède à une autre page du site avec la mise à jour en cours, cela ne met-il pas fin au processus? – Kardsen

+0

Il semble que vous ayez besoin d'un processus asynchrone sur le serveur. De cette façon, un appel pourrait être fait et presque immédiatement renvoyé, mais le travail continuerait à fonctionner, peu importe si l'utilisateur naviguait. Une fenêtre contextuelle a également la chance de se faire happer par les bloqueurs de fenêtres pop-up. – Carl

3

Il ya certainement une meilleure façon de le faire (comme ajax).

Mais pour répondre à votre question:

function loadpopunder(){ 
    var popunder=window.open(/* popup window parameters */); 
    popunder.blur(); 
    window.focus(); // focuses the main window. 
} 
+0

Eh bien, je sais que ce n'est peut-être pas la meilleure façon de le faire, mais bon! j'ai pu intégrer cela dans la page, puis dans le code derrière ajouté bodytag.Attributes.Add (« onload », « loadpopunder (» & dsinceup & "); «) Je voudrais 1 votre réponse, mais malheureusement, je Je ne suis pas encore assez haut classé. – Kardsen

Questions connexes