Creazione della tua tabella con i pulsanti CommandArgument in ASP.NET MVC
-
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?
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 %>"