Domanda

Ho una pagina ASP.Net, che visualizza un elenco di opzioni per l'utente. Quando si selezionano dalla lista, che fa un back postale e interroga un server SQL. I risultati vengono visualizzati in una lista sotto le opzioni in un pannello di aggiornamento. Di seguito è riportato un frammento del ItemTemplate:

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

Il DataItemIndex non appare, quindi il mio CommandArgument è vuoto. Tuttavia, il mittente oggetto è il pulsante, che mostra l'elemento.

Perché la voce di indice che non figurano in CommandArgument?

Potrebbe essere il palo? Se è così, perché sarebbe secondo palo? C'è un modo intorno ad esso?

Modifica: Siamo spiacenti, dai miei tentativi di risolvere prima, ho postato il codice cattivo, ma ancora non viene visualizzato.

Risoluzione: Ho trovato un altro lavoro intorno a che il mittente del OnCommand è il pulsante di collegamento, che ha la CommandArgument. Io il gesso questo problema fino ad essere un problema con più postback e javascript.

È stato utile?

Soluzione

Non è possibile utilizzare la sintassi <%= %> all'interno proprietà su un tag con un attributo runat="server". Mi sorprende il codice viene eseguito neppure. :)

UPDATE:

Probabilmente si desidera utilizzare l'evento ItemDataBound sul ripetitore, trovare il LinkButton e impostare la proprietà CommandArgument.

Non molto elegante, ma qui è un campione di 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

Altri suggerimenti

Non stai impostando

Probabilmente vuoi

<%# Container.DataItemIndex %>

o

<%= Container.DataItemIndex %>

:)

Prova

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

ti mancava il segno "#".

Questo sito davvero mi ha aiutato con questo problema: http://forums.asp.net/t /1671316.aspx

Il problema che ho incontrato era che mi era stata passata argomenti nulli nel CommandArgument quando ho cliccato sul pulsante una seconda volta. Come il post di cui sopra spiega, questo è perché CommandArgument si trova solo nel caso databind. Così, per risolvere questo problema, includere un evento DataBind nel Sub 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

Assicurarsi stato di visualizzazione è abilitata e.Row.EnableViewState = true;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top