Question

J'ai une page ASP.Net, qui affiche une liste d'options à l'utilisateur. Quand ils choisissent dans la liste, il fait un retour post et interroge un serveur SQL. Les résultats sont affichés dans un listview sous les options dans un panneau de mise à jour. Ci-dessous un extrait du ItemTemplate:

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" />

Le DataItemIndex ne semble pas, donc mon CommandArgument est vide. Cependant, l'expéditeur de l'objet est le bouton, ce qui montre l'élément.

Pourquoi l'élément d'index n'apparaît pas dans le CommandArgument?

Serait-ce le poste de retour? Si oui, pourquoi serait-il le poste de retour? Y at-il un moyen de contourner?

Edit: Désolé, de mes tentatives pour le résoudre avant, j'ai posté mauvais code, mais il n'apparaît toujours pas.

Résolution: J'ai trouvé un autre travail autour en ce que l'expéditeur du OnCommand est le bouton de lien, qui a le CommandArgument. Je craie cette question à un problème avec plusieurs postbacks et javascript.

Était-ce utile?

La solution

Vous ne pouvez pas utiliser la syntaxe <%= %> à l'intérieur des propriétés sur une étiquette avec un attribut runat="server". Je suis surpris que le code même de fonctionner. :)

Mise à jour:

Vous voulez probablement utiliser l'événement ItemDataBound sur le répéteur, trouver le linkbutton et définir la propriété CommandArgument.

Pas très élégant, mais voici un échantillon VB.NET.

Private Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
    Select Case e.Item.ItemType
      Case ListItemType.Item, ListItemType.AlternatingItem
        Dim b As LinkButton = e.Item.FindControl("btn")
        b.CommandArgument = e.Item.ItemIndex
        b.DataBind()
    End Select
  End Sub

Autres conseils

Vous n'êtes pas le mettre

Vous voulez peut-être

<%# Container.DataItemIndex %>

ou

<%= Container.DataItemIndex %>

:)

Essayez

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" />

Vous avez été absent du signe "#".

Ce site m'a vraiment aidé à ce problème: http://forums.asp.net/t /1671316.aspx

La question que je courais en était que j'étais passé arguments nuls dans le CommandArgument quand je clique sur le bouton une deuxième fois. Comme le poste explique ci-dessus, c'est parce que CommandArgument est uniquement définie en cas DataBind. Donc, pour résoudre ce problème, inclure un événement DataBind dans la sous page_load

Ex. (VB)

Private Sub BindSelectButtons()       

    'Purpose: bind the data to the select buttons for commandargument to be used
    Dim i As Integer
    For i = 0 To gridview1.Rows.Count - 1
        gridview1.Rows(i).Cells(8).FindControl("btnID").DataBind()
    Next
End Sub

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

    'Rebind select buttons so that the commandargument refreshes
    BindSelectButtons()
End Sub

Assurez-vous que l'état d'affichage est activé e.Row.EnableViewState = true;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top