2009-09-05 14 views
6

Ho una pagina ASP.Net, che visualizza un elenco di opzioni per l'utente. Quando selezionano dall'elenco, esegue un post e interroga un server sql. I risultati sono visualizzati in una lista sotto le opzioni in un pannello di aggiornamento. Di seguito è riportato un frammento del ItemTemplate:Perché il mio CommandArgument è vuoto?

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

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

Perché l'elemento dell'indice non viene visualizzato nel CommandArgument?

Potrebbe essere il post indietro? Se è così, perché sarebbe il post di ritorno? C'è un modo per aggirarlo?

Modifica: Spiacente, dai miei tentativi di risolverlo prima, ho pubblicato codice errato, ma non è ancora visualizzato.

Risoluzione: Ho trovato un altro problema in quanto il mittente di OnCommand è il pulsante di collegamento, che ha il CommandArgument. Scriverò questo problema fino a diventare un problema con più postback e javascript.

+0

quasi certamente il postback ... –

risposta

7

Non è possibile utilizzare la sintassi <%= %> all'interno delle proprietà su un tag con un attributo runat="server". Sono sorpreso che il codice funzionerà anche. :)

UPDATE:

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

Non molto elegante, ma ecco un esempio 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 
    End Select 
    End Sub 
+0

L'ho modificato in #, ma non lo visualizzerò ancora nel CommandArgument. Non risolve il problema originale. – kevindaub

+0

Ho trovato un'altra soluzione, ma anche la soluzione dovrebbe funzionare. – kevindaub

0

Non stai impostazione

Probabilmente vuoi

<%# Container.DataItemIndex %> 

o

<%= Container.DataItemIndex %> 

:)

0

Prova

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

Ti mancava il segno "#".

+0

Mi spiace, ho postato codice errato. Non sta ancora apparendo. – kevindaub

0

Questo sito mi ha veramente 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 spiegato sopra, questo è dovuto al fatto che il comando è impostato solo nell'evento del database. Quindi, per risolvere questo problema, includi un evento del database nel sottosuolo page_load

Es. (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 
0

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

Problemi correlati