commandargument string not notating

Ho un comando in una pagina di aspx impostata su una variabile object all’interno di un ciclo for come di seguito:

 <asp:LinkButton runat="server" OnCommand="deleteButton_Click" ID="deleteButton" CommandArgument="" ForeColor="Red" OnClientClick="javascript:return confirm('Are you sure you want to delete this item?');">X  

Quindi nel mio codice c # ho il seguente per cercare di ottenere questo valore:

 protected void deleteButton_Click(object sender, CommandEventArgs e) { int imageId = System.Convert.ToInt32(e.CommandArgument.ToString()); } 

Tuttavia il codice c # continua a restituire “System.FormatException: la stringa di input non era in un formato corretto.”

Durante il debug di e.CommandArgument contiene la stringa “” anziché l’effettivo ImageId, perché non sta valutando? Sebbene tutte le altre mie variabili valgano bene?

L’utilizzo di <%# %> viene utilizzato per il binding.

Usa invece <%= p.propertyblahblah %> .

Inoltre, non fare: commandArgument = “…” ma usa invece le virgolette singole; anche il ‘;’ può essere eliminato alla fine della tua dichiarazione.

-edit: Un’ultima cosa: basta usare un ripetitore per questo.

-edit2: Ok. questo non funzionerà davvero a meno che non si stia utilizzando un ripetitore o qualche altro tipo di controllo del database. O dovrai farlo in codice reale come:

  protected void Page_Load(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { LinkButton l = new LinkButton { CommandArgument = i.ToString(), Text = i.ToString(), }; l.Click += test_onclick; holder.Controls.Add(l); } } protected void test_onclick(object sender, EventArgs e) { var x = ((LinkButton)sender).CommandArgument; } 

Quello che stai cercando di fare non funzionerà. Alcune cose che puoi fare come alternative sono.

  1. Sostituire il ciclo for con un ripetitore e quindi utilizzare il collegamento dati per impostare le proprietà. In un commento hai detto che ti trasferirai su MVC. Credo che il controllo Repeater sia ancora supportato e dovrai comunque sostituire il LinkButton.

  2. Se devi utilizzare il ciclo for perché ti stai spostando su MVC, dovrai scrivere il tuo tag di collegamento ipertestuale. Qualcosa come questo:

     X 

    E quindi dovrai aggiungere un metodo RaisePostBackEvent alla class Page:

    public void RaisePostBackEvent(string eventArgument)
    {
    ...
    }

    Quando converti questa pagina in MVC, sostituisci il collegamento ipertestuale con una chiamata Html.ActionLink o Url.Action e trascina la logica RaisePostBackEvent nel controller.

hai provato come “<% = p.ImageId.ToString ();%>”

= piuttosto allora #

penso che # sia usato per i databindings, come all’interno di gridview.

spero che sia d’aiuto

Non ho assolutamente nessuna esperienza ASP classica, ma dai miei test sembra che tu non possa valutare il tuo codice C # all’interno di un controllo che è impostato per essere eseguito sul server. Ad esempio, i seguenti lavori:

 <% For x As Integer = 1 To 10 %> 

<%=x%>

<% Next %>

mentre questo non funziona:

 <% For x As Integer = 1 To 10 %> 

<%=x%>

<% Next %>

Quindi, dentro il tuo asp: controllo LinkButton, il <%%> non viene eseguito – è solo trattato come una stringa, poiché è racchiuso tra virgolette.

C’è qualche possibilità che il problema è con CommandEventArgs? Ho sempre usato solo EventArgs regolare, ma analizzo il mittente in un LinkButton e si riferisce direttamente a CommandArgument.

 protected void deleteButton_Click(object sender, EventArgs e) { LinkButton theSender = (LinkButton)sender; int imageId = System.Convert.ToInt32(theSender.CommandArgument.ToString()); }