2008-12-02 5 views
0

J'ai un contrôle GridView sur ma page que j'ai défini un certain nombre de BoundFields pour. Chaque ligne de la base de données GridView a un CommandField (Select), pour lequel je veux envoyer le PostBack à une nouvelle page.Est-ce que PostbackUrl peut être défini pour un GridView CommandField?

Bien sûr, je pourrais facilement envoyer le NewSelectedIndex dans un QueryString, mais je préfère garder cette information cachée à l'utilisateur. Suggestions?

Répondre

1

Leppie a raison. Le GridView n'a pas de propriété PostbackUrl. Cependant, vous pouvez faire ce que vous voulez en utilisant un contrôle standard, qui a une propriété PostbackUrl.

<asp:TemplateField AccessibleHeaderText="Edit"> 
    <ItemTemplate> 
     <asp:Button runat="server" ID="btnEdit" PostBackUrl="~/Default.aspx" OnClientClick='form1.ActivityId.value = this.Tag;' Tag='<%# Eval("ActivityId") %>' Text="Edit"/> 
    </ItemTemplate> 
</asp:TemplateField> 

Dans cet exemple de code, j'ai ajouté un TemplateColumn à GridView. J'utilise un attribut Tag ajouté dynamiquement pour que le bouton transmette l'ID, puis j'utilise le code Javascript pour placer la valeur dans un champ masqué, puis le bouton renvoie simplement la page spécifiée dans la propriété PostbackUrl.

+0

Testé dans IE seulement! –

0

Utilisez une colonne HyperLinkField dans votre GridView:

<asp:HyperLinkField AccessibleHeaderText="Edit" DataNavigateUrlFields="ActivityId" DataNavigateUrlFormatString="AcitivtyEdit.aspx?id={0}" Text="Edit Activity" /> 

Bien sûr, comme vous l'avez dit, cette option affiche l'ID dans l'URL. Pour le masquer (bien que tout le monde puisse vérifier votre javascript et voir ce que vous faites), vous avez deux options: 1. Utilisez le code Javascript pour définir un champ caché avec l'id, changez l'adresse de publication (action) du formulaire et soumettez le forme. Vous devez autoriser votre site asp.net à autoriser la publication à partir d'une autre page. 2. Autorisez la commande à publier sur la même page que celle qui héberge GridView et dans le gestionnaire d'événements côté serveur vers un serveur. Transférez vers votre page (cette option présente des problèmes d'otehr sur des postbacks séquentiels ...)

+0

Si vous faites ces trucs, ASP.NET lèvera une exception. Essayez avant de conseiller. – leppie

0

Merci Sergiu Damian.

J'utilise MasterPages et le champ caché UniqueID peut varier. J'ai besoin de poster deux valeurs.
En cas Gridview_RowDataBound je mettre ce code:

If e.Row.RowType = DataControlRowType.DataRow Then 
    e.Row.Cells(12).Text = "" 
    Dim img As New WebControls.ImageButton 
    img.PostBackUrl = "NecesidadesPostBack.aspx" 
    img.ImageUrl = "imagenes/edit.png" 
    img.OnClientClick = HDLB.UniqueID.ToString & ".value = '" & e.Row.Cells(0).Text & "'; " & HDPT.UniqueID.ToString & ".value = '" & e.Row.Cells(1).Text & "';" 
    img.AlternateText = "Edit" 
    e.Row.Cells(12).Controls.Add(img) 
End If 

J'ai 2 champs cachés (HDLB et HDPT). L'événement OnClientClick modifie la valeur de ces champs masqués avec la valeur de la première et de la deuxième cellule sur la grille.

Questions connexes