1
votes

Comment passer un argument de commande d'un bouton dans la liste de données à une autre page?

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>
                &nbsp;&nbsp;&nbsp;
                <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.


3 commentaires

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


4 Réponses :


-1
votes

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


1 commentaires

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.



0
votes

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.


8 commentaires

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.



0
votes

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


0 commentaires

0
votes

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;
    }                          
}

    


0 commentaires