2009-10-09 3 views
0

Dans ma page Web, j'ai un gridview qui contient le lien pour télécharger le fichier et le lien pour ouvrir un autre site web dans une page séparée. Quand je clique sur le lien gridview onRowCommand est exécuté et le site s'ouvre window.Après cela quand je rafraichir la page web, gridview onRowCommand est exécuté de nouveau et ouvre à nouveau le site Web dans la fenêtre séparée que je ne veux pas.Je veux que quand je clique sur le lien pour naviguer vers un autre site Web alors seulement il devrait aller. signifie à l'actualisation de la page, gridview onRowCommand ne devrait pas être exécuté. J'utilise Page.RegisterStartupScript pour ouvrir un autre site Web dans une fenêtre distincte.onRowCommand se fait à nouveau sur l'actualisation de la page

ASP.net 2.0

grâce

--------------------------------- ---------- ---------------- Code

vide grdDisplayView_onRowCommand (expéditeur d'objet, GridViewCommandEventArgs e) protégé {chemin de chaîne = e.CommandArgument .ToString();

 if (path.Contains("http")) 
     { 
      StringBuilder sbString = new StringBuilder("<script language='javascript'>"); 
      sbString.Append("window.open('"); 
      sbString.Append("http://www.yahoo.com','', 'status=no,width=600,height=500,toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes,titlebar=yes,top=198,left=305');"); 
      sbString.Append("</script>"); 

      if ((!Page.ClientScript.IsStartupScriptRegistered("clientScriptExportView"))) 
      { 
       Page.RegisterStartupScript("clientScriptExportView",sbString.ToString()); 
      } 

     } 
     else 
     { 
      //download file which is locally 
      path = Server.MapPath(path); 
      System.IO.FileInfo file = new System.IO.FileInfo(path); 

       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
       HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString()); 
       HttpContext.Current.Response.ContentType = "Application/octet-stream"; 
       HttpContext.Current.Response.WriteFile(file.FullName); 
       HttpContext.Current.Response.End(); 


     } 

    } 
+1

s'il vous plaît montrer un peu de code – TheVillageIdiot

Répondre

0

peut-être ce n'est pas ce que vous voulez, mais je devrais utiliser:

<a href="new page" target="_blank" >text</a> 

dans le itemtemplate gridview

ce fait en sorte qu'il n'y a pas de code derrière exécuté :) mais je ne ne sais pas si c'est ce que vous voulez

vous pouvez créer le lien dans le ondataitembound événement

si vous avez besoin du code derrière vous pouvez également utiliser l'événement dataitembound pour ajouter le javascript pour, par exemple, un ImageButton de lancer une nouvelle page et faire le code derrière l'événement onclick:

imagebutton.Attributes.Add("onclick", "window.open('otherpage.aspx?courseid=" + id+ "')") 
+0

non, je ne veux pas utiliser cela. – user92027

+0

pouvez-vous s'il vous plaît dites-moi ce que vous devez faire dans le code derrière? –

+0

remplissez-vous le gridview dans le page_load if (! Page.ispostback()) –

1

Si la l'utilisateur clique sur le bouton d'actualisation, toutes les informations envoyées dans la demande précédente seront renvoyées. C'est-à-dire, si l'utilisateur clique sur un bouton, et s'il appuie sur le bouton d'actualisation, l'action de clic de bouton sera renvoyée au serveur.

Je crois qu'il n'y a pas de moyen facile de faire la distinction entre le clic du bouton original, et le clic du bouton envoyé via l'actualisation de la page.

Ceci est un problème classique, et peut être résolu (d'une manière pas si facile) en utilisant le modèle Post/Redirect/Get. Voir here (wiki)/here.

Je ne sais pas si cela va résoudre votre problème, mais il est à espérer que vous serez sur la bonne voie! J'espère que cela aide !

Voir this SO post qui décrit comment implémenter le modèle dans ASP.NET Web Forms.

+0

Merci pour votre réponse! ce n'est pas ce que je veux. Je veux juste savoir comment arrêter l'exécution de l'événement gridView onRowCommand lors de l'actualisation de la page s'il y a un lien dans gridview pour ouvrir un autre site web dans une fenêtre séparée. L'actualisation de la page est similaire au chargement de la page. Pendant le chargement de la page, cet événement n'est pas exécuté automatiquement. Pourquoi est-il exécuté à l'actualisation de la page? Si je supprime le lien qui ouvre un nouveau site Web dans une fenêtre séparée, l'événement onRowCommand n'est pas exécuté. – user92027

+0

Bonjour, l'actualisation de la page n'est pas la même que lors du premier chargement de la page. L'actualisation de la page est identique à la demande LAST envoyée du navigateur au serveur. Si vous supprimez le lien, comment allez-vous cliquer sur le lien dans un scénario normal? L'actualisation déclenche l'événement RowCommand UNIQUEMENT si la dernière action sur votre page avant l'actualisation était en cliquant sur ce lien. Si vous ne cliquez pas sur le lien et que vous actualisez la page, aucune commande de ligne n'est nécessaire car elle n'a pas été déclenchée lors de la dernière requête. – Preets

+0

Ce que vous pouvez faire est de créer un formulaire simple avec deux boutons. Sur le clic des boutons affichent une boîte de message simple "Button 1" et "Button 2". Maintenant, lancez l'application et cliquez sur le premier bouton. Vous verrez le message "Bouton 1". Maintenant, actualisez la page. Vous devriez voir le message "Bouton 1". Maintenant, cliquez sur le deuxième bouton. Vous verrez le message "Bouton 2". Maintenant, actualisez la page et vous devriez voir "Button 2" affiché. Grâce à ce petit exercice, vous pouvez comprendre le fonctionnement de l'actualisation de la page. C'est à dire. il copie la dernière action qui apparaît sur votre page. J'espère que ça aide :) – Preets

Questions connexes