2009-09-28 6 views
1

J'utilise un contrôle de répéteur pour afficher les données dans mon site Web. J'utilise un HyperLink dans le contrôle Repeater pour afficher un champ de ma table dans la base de données.Envoyer chaîne avec QueryString dans le contrôle de répéteur dans ASP.net

Lorsque vous cliquez sur, je veux que ce lien passe à une autre page et envoie une chaîne à cette [page] avec un QueryString. Je ne sais pas comment je fais cela - pouvez-vous expliquer comment le faire? J'utilise Linq dans ASP.net.

Répondre

5
<asp:HyperLink ID="HyperLink3" NavigateUrl='<%#Eval("ID_Message","~/ADMIN/Reply.aspx?ID={0}") %>' runat="server">OK</asp:HyperLink> 
1

Voici un exemple dans un ItemTemplate dans un répéteur pour vous donner une idée. Latitude et Longitude proviennent d'une base de données

<a target="_blank" class="newwindow" href="http://maps.google.com/maps?saddr=<%=addressTextBox.Text%>&daddr=<%#Eval("Latitude")%>,<%#Eval("Longitude") %>"> 
2

Commençons par le format du QueryString. Le QueryString ressemble à ce qui suit:

http://www.mysite.com/somepage.aspx?id=? 

Droite!

Bien sûr, vous pouvez passer plusieurs paramètres QueryString en utilisant le symbole « & », comme indiqué ci-dessous:

http://www.mysite.com/somepage.aspx?id=?&foo=? 

Maintenant, vous devez faire la même chose, mais à l'intérieur du contrôle Repeater et en utilisant les valeurs de la base de données.

<asp:Repeater> 

<ItemTemplate> 
<a href="http://www.mysite.com/somepage.aspx?id=<%# Eval("Id") #>"><Eval("Title")</a> 
</ItemTemplate> 
</asp:Repeater> 

Le Eval ("Id") est la propriété de votre source de données qui peut être DataSet, DataTable, classes d'entité, etc.

Le < %# Eval("Id") #> sera appelée lorsque vous liez le contrôle Repeater. Vous liez le contrôle Repeater à l'aide de la méthode Repeater.DataBind().

Obtenir l'ID de l'autre page:

if(Request.QueryString["id"] != null) 
{ 
    string id = Request.QueryString["id"] as String; 
} 
+0

je changerais? Id =? à quelque chose comme? id = 0, depuis l'utilisation? comme un espace réservé pourrait confondre une personne avec aucune idée de comment une chaîne de requête fonctionne. –

+0

Merci Jason pour le signaler :) – azamsharp

+0

quand j'envoie cet ID, Comment je reçois cela sur cette page –

0

Utilisez la méthode Eval pour évaluer un champ dans votre page rendue. Par exemple, vous avez une table Products, et vous voulez un lien qui passe l'identifiant d'un produit à showproduct.aspx. Consultez l'exemple ci-dessous:

<a href='showproduct.aspx?productid=<%#Eval("ProductID")%>'>View Details</a> 

A showproduct.aspx utilisation Page.Request.QueryString collection pour obtenir le produit:

string productId = Page.Request.QueryString["productid"].ToString(); 
1

Puisque tout le monde a affiché le code avec toute l'évaluation intégrée dans la page ASPX je vais poster un avec tout le code requis dans le code derrière (où je préfère tout ce code pour être).

d'abord dans votre répéteur, vous aurez besoin d'un contrôle:

<asp:Repeater> 
    <ItemTemplate> 
     <asp:HyperLink ID="hrefLink" 
      href="http://www.mysite.com/somepage.aspx?id={0}&more={1}" 
      OnDataBinding="hrefLink_DataBinding"> 
     </asp:HyperLink> 
    </ItemTemplate> 
</asp:Repeater> 

Puis dans votre code derrière vous mettre en œuvre le databinding pour remplir vos liens détails:

protected void hrefLink_DataBinding(object sender, System.EventArgs e) 
{ 
    HyperLink link = (HyperLink)(sender); 
    // Fill in your links details 
    link.NavigateUrl = string.Format(link.NavigateUrl, 
     Eval("ID").ToString(), Eval("More").ToString()); 
    link.Text = Eval("LinkTitle").ToString();   
} 

L'avantage de cela est que vous pouvez facilement ajouter plus de logique si nécessaire sans encombrer votre page aspx avec des tonnes de code. Je préfère cette méthode à l'intégration mais elles sont toutes deux des solutions valables et c'est plutôt une préférence.

Si vous ne voulez pas prédéfinir où le lien iriez-vous pouvez modifier le code ci-dessus pour réécrire databinding l'ensemble NavigateUrl à ce que vous voulez. Donc, sur la base une valeur evalulated, vous pouvez rediriger vers des pages différentes. C'est la solution la plus personnalisable. Note: Assurez-vous d'éteindre ViewState sur les répéteurs si vous n'en avez pas besoin car cela cause beaucoup d'encombrement.

Questions connexes