Perché il mio CommandArgument vuoto?
-
21-09-2019 - |
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.
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;