Criando sua própria tabela com botões CommandArgument em ASP.NET MVC

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

  •  08-06-2019
  •  | 
  •  

Pergunta

Estou tentando implementar algo assim:

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

Os botões CommandArgument propriedade é onde meu código reclama por não ser capaz de resolver o símbolo ip.Existe alguma maneira de fazer o que estou tentando fazer?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Foi útil?

Solução

Você não deseja usar um botão Webforms no ASP.NET MVC.MVC é uma forma completamente diferente de trabalhar e você não tem mais a abstração de WebForms.

Você tem 2 opções diferentes: pode substituir seu asp:Button por uma tag de entrada ou usar um hiperlink padrão.Se você usar a opção de entrada, precisará agrupar um elemento de formulário.A ação do formulário deve apontar para uma ação do Controlador.

Outras dicas

Você não pode usar controles de formulário da web no ASP.NET MVC de maneira trivial porque eles dependem de coisas que são eliminadas no MVC.Em vez disso, você adiciona um botão de duas maneiras, ambas usando o HtmlHelper no ViewPage:

Você pode adicionar um botão em um formulário, que pode ser facilmente manipulado em um controlador se você tiver um formulário para cada botão:

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

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

<% } %>

BeginForm() terá como padrão o mesmo controlador e ação a partir dos quais a visualização foi criada.A outra maneira é adicionar um link, que é mais adequado ao seu exemplo de iteração em uma lista.Por exemplo, digamos que você tenha IpController

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

O link irá para a ação Update no IpController com o portName fornecido como parâmetro.Em ambos os casos você precisará desta ação no IpController:

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

Espero que isto ajude.

Eu acho que você tem que colocar seu bloco em tags de formulário e runat=server.

FWIW,

Acho que falta um sinal de igual neste texto:

CommandArgument="<% ip.PortName %>"

Deveria estar

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top