En fait, j'essaye de rediriger l'argument de commande d'un bouton présent dans une liste de données vers une autre page. J'utilise la méthode Request.QueryString pour accéder à l'argument de commande sur une autre page à l'aide du nom de commande du bouton. S'il vous plaît, aidez-moi ...
ceci est le code du bouton présent dans la liste de données
<asp:DataList ID="DataList1" runat="server" DataKeyField="Id" DataSourceID="SqlDataSource1" Height="657px" RepeatColumns="4" RepeatDirection="Horizontal" Width="1248px" OnItemCommand="DataList1_ItemCommand" OnItemDataBound="DataList1_ItemDataBound"> <FooterStyle BackColor="White" ForeColor="#000066" /> <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> <ItemStyle ForeColor="#000066" /> <ItemTemplate> <table class="auto-style2"> <tr> <td style="text-align: center"> <asp:Label ID="Label2" runat="server" Text='<%# Eval("name") %>'></asp:Label> <asp:Label ID="Label4" runat="server" Text='<%# Eval("Id") %>' Visible="False"></asp:Label> </td> </tr> <tr> <td style="text-align: center"> <asp:Image ID="Image2" runat="server" Height="250px" ImageUrl='<%# Eval("image") %>' Width="250px" /> </td> </tr> <tr> <td style="text-align: center"> <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label> <br /> <asp:ImageButton ID="ImageButton1" runat="server" CommandName="addtofav" CommandArgument='<%# Eval("id")%>' Height="30px" Width="20px" /> </td> </tr> <tr> <td style="text-align: center"> <asp:Button ID="Button1" runat="server" Text="Read" CommandArgument='<%# Eval("id")%>' OnClick="Button1_Click" CommandName="content"/> </td> </tr> </table <br /> <br /> </ItemTemplate> <SelectedItemStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
c'est le code présent dans la fonction de commande d'élément DataList
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { String id = Request.QueryString["content"]; Label1.Text = id; } }
ceci est le code de la fonction onclick
protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("content.aspx"); }
ceci est le code d'une autre page (content.aspx)
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) { Response.Redirect("content.aspx?content=" +e.CommandArgument.ToString()); }
c'est tout le code datalist
<asp:Button ID="Button1" runat="server" Text="Read" CommandArgument='<%# Eval("id")%>' OnClick="Button1_Click" CommandName="content"/>
il redirige vers une autre page (content.aspx) mais le libellé ne le fait pas afficher le texte de la chaîne de requête.
4 Réponses :
Vous pouvez trouver toutes les informations dont vous avez besoin dans ce tutoriel. de @microsoft msdn Bonne chance
<%@ Page Language="C#" AutoEventWireup="True" %> <%@ Import Namespace="System.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>DataList Select Example</title> <script runat="server"> ICollection CreateDataSource() { // Create sample data for the DataList control. DataTable dt = new DataTable(); DataRow dr; // Define the columns of the table. dt.Columns.Add(new DataColumn("Item", typeof(Int32))); dt.Columns.Add(new DataColumn("Qty", typeof(Int32))); dt.Columns.Add(new DataColumn("Price", typeof(double))); // Populate the table with sample values. for (int i = 0; i < 9; i++) { dr = dt.NewRow(); dr[0] = i; dr[1] = i * 2; dr[2] = 1.23 * (i + 1); dt.Rows.Add(dr); } DataView dv = new DataView(dt); return dv; } void Page_Load(Object sender, EventArgs e) { // Load sample data only once, when the page is first loaded. if (!IsPostBack) { ItemsList.DataSource = CreateDataSource(); ItemsList.DataBind(); } } void Item_Command(Object sender, DataListCommandEventArgs e) { // Set the SelectedIndex property to select an item in the DataList. ItemsList.SelectedIndex = e.Item.ItemIndex; // Rebind the data source to the DataList to refresh the control. ItemsList.DataSource = CreateDataSource(); ItemsList.DataBind(); } </script> </head> <body> <form id="form1" runat="server"> <h3>DataList Select Example</h3> Click <b>Select</b> to select an item. <br /><br /> <asp:DataList id="ItemsList" GridLines="Both" CellPadding="3" CellSpacing="0" OnItemCommand="Item_Command" runat="server"> <HeaderStyle BackColor="#aaaadd"> </HeaderStyle> <AlternatingItemStyle BackColor="Gainsboro"> </AlternatingItemStyle> <SelectedItemStyle BackColor="Yellow"> </SelectedItemStyle> <HeaderTemplate> Items </HeaderTemplate> <ItemTemplate> <asp:LinkButton id="SelectButton" Text="Select" CommandName="Select" runat="server"/> Item <%# DataBinder.Eval(Container.DataItem, "Item") %> </ItemTemplate> <SelectedItemTemplate> Item: <asp:Label id="ItemLabel" Text='<%# DataBinder.Eval(Container.DataItem, "Item") %>' runat="server"/> <br /> Quantity: <asp:Label id="QtyLabel" Text='<%# DataBinder.Eval(Container.DataItem, "Qty") %>' runat="server"/> <br /> Price: <asp:Label id="PriceLabel" Text='<%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>' runat="server"/> </SelectedItemTemplate> </asp:DataList> </form> </body> </html>
Au fait, je pense que vous n'avez pas besoin de définir l'événement Button Click. Chemin déjà défini avec variable. Convertissez simplement le bouton en bouton de lien et supprimez l'événement de clic de bouton
essayé la méthode du bouton de lien monsieur. ne fonctionne toujours pas. Il redirige vers une autre page mais l'étiquette n'affiche pas le texte de la chaîne de requête.
Essayez de mettre à jour l'événement DataList1_ItemCommand comme suit:
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) { if (e.CommandName == "content") { Response.Redirect("content.aspx?content=" +e.CommandArgument.ToString()); } }
assurez-vous également de vérifier IsPostBack dans la méthode Page Load de ce code de page derrière.
Monsieur, j'ai déjà lié DataList à OnItemCommand ne fonctionne toujours pas
pouvez-vous ajouter le balisage entier de DataList dans la question?
Non monsieur. Il redirige toujours vers une autre page mais l'étiquette n'affiche aucun texte.Et je suppose qu'il redirige en raison du postbackurl spécifié et DataList1_ItemCommand ne fonctionne pas dans le cas d'une redirection vers une autre page avec l'argument de commande.
Je pense que l'événement de clic Button1 est toujours là à l'origine de cela, supprimez OnClick = "Button1_Click" de Button1 Html
Lorsque vous cliquez sur le bouton Lien, pouvez-vous voir la valeur sur la ligne d'adresse lors de la redirection?
@Rashid Ali J'ai supprimé le bouton onClick du html. Maintenant, il ne redirige même pas vers une autre page.
@Uzay oui, je peux voir la valeur sur la ligne d'adresse lors de la redirection en cliquant sur le bouton Lien.
Votre première page envoie la valeur comme vous pouvez le voir. Content.aspx ne se déclenche pas? Placez le point d'arrêt sur l'événement Content.aspx de chargement de page et vérifiez le nom et la valeur de la chaîne de requête.
Oui, j'ai obtenu la sortie souhaitée. En fait, j'utilisais également un autre bouton pour rediriger vers une page différente dans la fonction DataList1_ItemCommand. J'ai donc juste besoin de séparer les Response.redirects des 2 boutons en les mettant dans la boucle if.
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) { if (e.CommandName == "content") { Response.Redirect("content.aspx?content="+e.CommandArgument.ToString()); } if (e.CommandName == "addtofav") { Response.Redirect("sortbyAZ.aspx?addtofav=" + e.CommandArgument.ToString()); } }
Merci à tous de m'avoir aidé avec celui-ci
Je pense que vous ne convertissez pas la Request.QueryString ["content"] au format chaîne, essayez ceci
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { String id = Request.QueryString["content"]; Label1.Text = id; } }
avez-vous essayé Response.Redirect ("content.aspx? content =" + e.CommandArgument + ");
Ouaip. Ça ne marche pas.
vous pouvez essayer une nouvelle version de ma réponse