Creazione della tua tabella con i pulsanti CommandArgument in ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/16964

  •  08-06-2019
  •  | 
  •  

Domanda

Sto cercando di implementare qualcosa del genere:

<div>
    <table>
        <thead>
            <tr>
                <td>Port name</td>
                <td>Current port version</td>
                <td>New port version</td>
                <td>Update</td>
            </tr>
        </thead>
        <% foreach (var ip in Ports) { %>
            <tr>
                <td>
                    <%= ip.PortName %>
                </td>
                <td>
                    <%= ip.CurrentVersion %>
                </td>
                <td>
                    <%= ip.NewVersion %>
                </td>
                <td>
                    <asp:Button ID="btnUpdate" runat="server" Text="Update" CommandArgument="<% ip.PortName %>" />
                </td>
            </tr>
            <% } %>
    </table>
</div>

Quello del pulsante CommandArgument proprietà è dove il mio codice si lamenta di non essere in grado di risolvere il simbolo ip.C'è un modo per fare quello che sto cercando di fare?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

È stato utile?

Soluzione

Non si desidera utilizzare un pulsante Webforms in ASP.NET MVC.MVC è un modo di lavorare completamente diverso e non hai più l'astrazione WebForms.

Hai 2 diverse opzioni: puoi sostituire il tuo asp:Button con un tag di input o utilizzare invece un collegamento ipertestuale standard.Se utilizzi l'opzione di input, dovrai racchiudere un elemento del modulo.L'azione del modulo dovrebbe puntare a un'azione del controller.

Altri suggerimenti

Non è possibile utilizzare i controlli del modulo Web in ASP.NET MVC in modo banale perché si basano su elementi che vengono eliminati in MVC.Invece puoi aggiungere un pulsante in due modi, entrambi utilizzando il file HtmlHelper sul ViewPage:

Puoi aggiungere un pulsante in un modulo, cosa che può essere facilmente gestita in un controller se hai un modulo per ogni singolo pulsante:

<% using(Html.BeginForm("Update", "Ip", new {portName = ip.PortName} )) { %>

    ....
    <input name="action" type="submit" value="Update">

<% } %>

BeginForm() utilizzerà per impostazione predefinita lo stesso controller e la stessa azione da cui è stata creata la vista.L'altro modo è aggiungere invece un collegamento, che è più adatto al tuo esempio di ripetizione di un elenco.Ad esempio, supponiamo che tu abbia IpController

<%= Html.ActionLink("Update IP", "Update", "Ip", 
        new { 
            portName = ip.PortName 
        }) 
%>

Il collegamento andrà all'azione Aggiorna in IpController con il portName specificato come parametro.In entrambi i casi avrai bisogno di questa azione in IpController:

public ActionResult Update(string portName) {
    // ...
}

Spero che questo ti aiuti.

Penso che devi racchiudere il tuo blocco nei tag Form ans runat=server.

FWIW,

Penso che a questo testo manchi un segno di uguale:

CommandArgument="<% ip.PortName %>"

Dovrebbe essere

CommandArgument="<%= ip.PortName %>"

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