Dans les applications ASP.NET, il existe de nombreuses façons de naviguer entre les formulaires Web : à l'aide de liens hypertexte, à l'aide de Response.Redirect, à l'aide de Server.Transfer ou à l'aide de Server.Execute. Cet article analysera les similitudes, les différences, ainsi que les avantages et les inconvénients de ces quatre méthodes de navigation pour vous aider à choisir la meilleure méthode de navigation.
1. Lien hypertexte
La manière la plus simple de saisir un autre formulaire à partir d'un formulaire consiste à utiliser le contrôle de lien hypertexte HTML. Dans un formulaire Web, utilisez la classe de code HTML des hyperliens tels que :
<a href="WebForm2.aspx">Entrez le formulaire 2</a>
Lorsque l'utilisateur clique sur le lien hypertexte, WebForm2.aspx est exécuté et le résultat est envoyé à le navigateur. La navigation par hyperliens peut être utilisée presque partout, y compris les pages HTML et les pages ASP ordinaires. ASP.NET fournit également une autre méthode alternative, le contrôle serveur HyperLink :
<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat=" server"
NavigateUrl="WebForm2 .aspx">Enter Form 2</asp:HyperLink>
</form>
Le résultat de l'exécution du code HTML ci-dessus est le même que celui du premier exemple, car ASP.NET traite le contrôle serveur Web HyperLink comme un contrôle HTML super Link. Mais il existe une différence importante entre les deux. Les contrôles du serveur Web HyperLink peuvent être programmés côté serveur. Plus précisément, sa propriété NavigateUrl peut être modifiée dans le code du programme, permettant la construction de liens hypertexte dont les cibles spécifiques peuvent changer dynamiquement en fonction de l'état actuel de l'application, par exemple :
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e Comme System.EventArgs) _
Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub
Une fois ce code exécuté, si l'utilisateur clique sur le lien, il verra WebForm3.aspx au lieu de WebForm2.aspx.
2. Utilisez le programme pour contrôler la redirection
Bien que les hyperliens puissent naviguer d'une page à une autre, cette méthode de navigation est entièrement contrôlée par l'utilisateur. Parfois, nous pouvons avoir besoin d'utiliser du code pour contrôler l'ensemble du processus de navigation, y compris le moment où accéder à une autre page. Dans ces situations, ASP.NET dispose de trois manières différentes pour atteindre des objectifs similaires : en appelant la méthode Redirect de l'objet Response et en appelant la méthode Transfer ou Execute de l'objet Server. Le comportement de ces trois méthodes de navigation est fondamentalement similaire, mais il existe des différences.
2.1 Response.Redirect
La méthode Response.Redirect amène le navigateur à créer un lien vers une URL spécifiée. Lorsque la méthode Response.Redirect() est appelée, elle crée une réponse avec le code d'état 302 (indiquant que la cible a changé) et la nouvelle URL cible dans les en-têtes de réponse. Le navigateur reçoit la réponse du serveur et utilise les informations contenues dans l'en-tête de réponse pour émettre une demande pour la nouvelle URL.
C'est-à-dire que lors de l'utilisation de la méthode Response.Redirect, l'opération de redirection se produit côté client et implique un total de deux communications avec le serveur (deux allers-retours) : la première est une requête pour la page d'origine, qui obtient un Réponse 302, et la deuxième La deuxième fois consiste à demander la nouvelle page déclarée dans la réponse 302 et à obtenir la page après la redirection.
2.2 Server.Transfer
La méthode Server.Transfer transfère le flux d'exécution du fichier ASPX actuel vers une autre page ASPX sur le même serveur. Lorsque Server.Transfer est appelé, l'exécution de la page ASPX actuelle est terminée et le flux d'exécution est transféré vers une autre page ASPX, mais la nouvelle page ASPX utilise toujours le flux de réponse créé par la page ASPX précédente.
Si vous utilisez la méthode Server.Transfer pour naviguer entre les pages, l'URL dans le navigateur ne changera pas, car la redirection est entièrement effectuée côté serveur et le navigateur ne sait pas que le serveur a effectué un changement de page.
Par défaut, la méthode Server.Transfer ne transmet pas les données de formulaire ni les chaînes de requête d'une page à une autre, mais tant que le deuxième paramètre de la méthode est défini sur True, les données de formulaire de la première page peuvent être conservées et interrogées. chaîne.
Dans le même temps, une chose doit être notée lors de l'utilisation de Server.Transfer : la page cible utilisera le flux de réponse créé par la page d'origine, ce qui amènera le contrôle d'authentification de la machine (MAC) d'ASP.NET à penser que l'état d'affichage de la nouvelle page a été falsifié. Par conséquent, si vous souhaitez conserver les données du formulaire et la collection de chaînes de requête de la page d'origine, vous devez définir la propriété EnableViewStateMac de la directive Page de la page cible sur False.
2.3 Server.Execute
La méthode Server.Execute permet à la page ASPX actuelle d'exécuter une page ASPX spécifiée sur le même serveur Web. Lorsque la page ASPX spécifiée est exécutée, le flux de contrôle revient à l'emplacement où la page d'origine a émis le Server.Execute. appel.
Cette méthode de navigation dans la page est similaire à un appel de fonction pour une page ASPX. La page appelée peut accéder aux données de formulaire et à la collection de chaînes de requête de la page appelante. La propriété EnableViewStateMac de la commande Page de la page appelée doit donc être définie sur False.
Par défaut, la sortie de la page appelée est ajoutée au flux de réponse actuel. Cependant, la méthode Server.Execute possède une méthode surchargée qui permet d'obtenir la sortie de la page appelée via un objet TextWriter (ou son sous-objet, tel qu'un objet StringWriter), plutôt que de l'ajouter directement au flux de sortie, donc que dans la page d'origine Vous pouvez facilement ajuster l'emplacement des résultats de sortie de la page appelée.
Pour illustrer son processus de travail, créons un formulaire Web, insérons un contrôle bouton (Button1) et un contrôle texte (Literal1), passons à la vue code dans l'interface de conception, ajoutons une instruction Imports de l'espace de noms System.IO et puis ajoutez le code exécuté lorsque l'utilisateur clique sur le bouton :
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim sw As StringWriter = New StringWriter()
Server.Execute( "WebForm2. aspx", sw)
Literal1.Text = sw.ToString()
End Sub
Créez ensuite une deuxième page WebForm2.aspx pour la même application Web. Accédez à la vue HTML de la page et modifiez sa directive Page pour désactiver la vérification ViewState :
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac= "false "%>
Revenez en mode création et ajoutez quelques contrôles à la deuxième page. Ensuite, définissez la première page comme page par défaut et démarrez l'application. Cliquez sur le bouton et le contrôle de WebForm2 sera affiché à l'endroit où le bouton Littéral est placé dans WebForm1, comme le montre la figure 1. Notez que le titre de la page et l'URL affichent toujours la page d'origine WebForm1.
Figure 1 : Utilisez Server.Execute pour fusionner deux fichiers sources.
Lorsque vous utilisez la méthode Server.Transfer ou Server.Execute pour implémenter la navigation, une chose à noter : la page finale peut ne pas être une page HTML légale, car la page est finalement renvoyée. le client peut contenir plusieurs balises <HTML> et <BODY>. Internet Explorer semble tolérer et gérer cette situation correctement, mais si vous souhaitez utiliser un autre navigateur, vous feriez mieux de le tester attentivement.
3. Comparaison et sélection
Puisqu'il existe de nombreuses façons de naviguer d'une page à l'autre, comment choisir la meilleure méthode de navigation ? Voici quelques facteurs à considérer :
·Les hyperliens sont les meilleurs si vous souhaitez que les utilisateurs décident quand changer de page et à quelle page aller.
· Si vous souhaitez utiliser un programme pour contrôler la cible de conversion, mais que le moment de la conversion est déterminé par l'utilisateur, utilisez le contrôle HyperLink du serveur Web pour définir dynamiquement sa propriété NavigateUrl.
·Si vous souhaitez connecter l'utilisateur à une ressource sur un autre serveur, utilisez Response.Redirect.
· Utilisez Response.Redirect pour connecter les utilisateurs à des ressources non-ASPX, telles que des pages HTML.
· Si vous souhaitez conserver la chaîne de requête dans le cadre de l'URL, utilisez Response.Redirect.
·Si vous souhaitez transférer le processus d'exécution vers une autre page ASPX sur le même serveur Web, vous devez utiliser Server.Transfer au lieu de Response.Redirect, car Server.Transfer peut éviter les communications réseau inutiles, obtenant ainsi de meilleures performances et effets de navigation.
· Si vous souhaitez capturer les résultats de sortie d'une page ASPX, puis insérer les résultats dans une autre page ASPX à un emplacement spécifique, utilisez Server.Execute.
·Si vous souhaitez vous assurer que la sortie HTML est légale, veuillez utiliser Response.Redirect, n'utilisez pas la méthode Server.Transfer ou Server.Execute.
Cet article est traduit de : http://www.ondotnet.com/pub/a/dotnet/2003/04/07/aspnetnav.html