Pregunta

Estoy intentando implementar algo como esto:

<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>

Los botones CommandArgument La propiedad es donde mi código se queja de no poder resolver el símbolo. ip.¿Hay alguna forma de hacer lo que estoy intentando hacer?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

¿Fue útil?

Solución

No desea utilizar un botón de formularios web en ASP.NET MVC.MVC es una forma de trabajar completamente diferente y ya no tienes la abstracción de WebForms.

Tiene 2 opciones diferentes: puede reemplazar su asp:Button con una etiqueta de entrada o usar un hipervínculo estándar en su lugar.Si utiliza la opción de entrada, deberá ajustarla en un elemento de formulario.La acción del formulario debe apuntar a una acción del Controlador.

Otros consejos

No puede usar controles de formulario web en ASP.NET MVC de manera trivial porque dependen de cosas que están eliminadas en MVC.En su lugar, agrega un botón de dos maneras, ambas usando el HtmlHelper sobre el ViewPage:

Puede agregar un botón en un formulario, que se maneja fácilmente en un controlador si tiene un formulario para cada botón:

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

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

<% } %>

BeginForm() utilizará de forma predeterminada el mismo controlador y acción desde donde se creó la vista.La otra forma es agregar un enlace, que se adapta mejor a su ejemplo de iteración a través de una lista.Por ejemplo digamos que tienes IpController

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

El enlace irá a la acción Actualizar en IpController con el nombre del puerto dado como parámetro.En ambos casos necesitarás esta acción en IpController:

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

Espero que esto ayude.

Creo que debes encerrar tu bloque en etiquetas de formulario y runat=server.

FWIW,

Creo que a este texto le falta un signo igual:

CommandArgument="<% ip.PortName %>"

Debiera ser

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top