SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
14.02.2025

Lidar com Vários Botões de Envio no ASP.NET MVC

Visão Geral Rápida

Uma maneira conveniente de trabalhar com vários botões de envio no ASP.NET MVC é através do controlador. Atribua valores únicos ao atributo name de cada botão, seguindo estas regras: cada botão deve ter name="action" com um value único. No controlador, você precisa analisar o parâmetro action para determinar qual botão foi pressionado.

<button type="submit" name="action" value="Enviar">Enviar</button>
<button type="submit" name="action" value="Cancelar">Cancelar</button>

O controlador determina qual botão foi pressionado e lida com a ação correspondente:

[HttpPost]
public ActionResult MinhaAcao(string action)
{
    switch (action)
    {
        case "Enviar":
            // Processar envio!
            break;
        case "Cancelar":
            // A escolha foi cancelar.
            break;
    }
    return View();
}

Essa abordagem permite que o controlador gerencie de forma clara e eficaz cada botão de envio, sem a necessidade de JavaScript adicional.

Usando Atributos

À medida que as aplicações crescem, os formulários se tornam mais complexos. Para lidar com esses formulários, métodos que usam atributos personalizados são bastante práticos.

Uso Avançado de Atributos

MultipleButtonAttribute é um atributo que permite associar métodos de ação a botões específicos.

public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
    public string Name { get; set; }
    public string Argument { get; set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        bool isValidName = false;
        var keyValue = $"{Name}:{Argument}";
        var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);

        // Verifica se o botão foi pressionado.
        if (value != null)
        {
            // Vincula a pressão do botão aos métodos de ação correspondentes.
            controllerContext.Controller.ControllerContext.RouteData.Values[actionName] = Argument;
            isValidName = true;
        }

        return isValidName;
    }
}

Para usar métodos com atributos de forma eficaz:

[HttpPost]
[MultipleButton(Name = "action", Argument = "Enviar")]
public ActionResult Enviar()
{
    // O processo de envio é executado...
    return View("Sucesso");
}

[HttpPost]
[MultipleButton(Name = "action", Argument = "Cancelar")]
public ActionResult Cancelar()
{
    // Vamos tentar novamente?
    return View();
}

Trabalhando com Páginas Razor

As Páginas Razor no ASP.NET Core simplificam o manuseio de vários botões de envio utilizando métodos manipuladores.

Código Confiável e Seguro

Escrever um código adequado que garanta segurança é tão importante quanto desenvolver funcionalidades.

Suporte Multilíngue e Segurança de Código

Um código confiável previne ataques XSS e suporta múltiplos idiomas. Use Html.Encode para um manuseio seguro da entrada do usuário e garanta suporte multilíngue aproveitando arquivos de recurso para os botões.

Separação da Lógica de Ação e Elementos de UI

É aconselhável separar a lógica de ação dos nomes dos elementos de UI, reduzindo a complexidade da dependência e simplificando a manutenção do código.

Visualização

Visualize o formulário em um site como um painel de controle, onde cada botão realiza sua tarefa:

Painel de Controle: [✔️Aprovar] [❌Rejeitar] [✏️Editar] [🗑️Excluir]

E aqui está como fica em HTML:

<button name="action" value="aprovar">✔️ Aprovar</button>
<button name="action" value="rejeitar">❌ Rejeitar</button>
<button name="action" value="editar">✏️ Editar</button>
<button name="action" value="excluir">🗑️ Excluir</button>

O controlador aciona a ação correspondente:

public ActionResult AcaoControle(string action)
{
    switch (action)
    {
        case "aprovar": // Aprovando uma transação.
            break;
        case "rejeitar": // Rejeitando uma oferta.
            break;
        case "editar": // Editando dados.
            break;
        case "excluir": // Excluindo um registro.
            break;
    }
}

Assim, o formulário funciona como um painel de controle amigável ao usuário.

Organização do Código em Formulários Complexos e Escalabilidade

Formulários complexos com múltiplos botões exigem uma abordagem especial para a organização do código e escalabilidade.

Padrões para Escalabilidade

Utilize padrões estratégicos encapsulando ações de envio em classes separadas - isso melhora a extensibilidade dos formulários e facilita os testes.

Lidar com Ações Sem Envio de Formulário

Para ações que não requerem envio de formulário, como "Cancelar", use Html.ActionLink. Isso pode melhorar a performance e manter as URLs mais limpas.

Dividir Formulários para Maior Clareza

Se um formulário inclui ações diversas, considere dividi-lo em formulários separados. Isso mantém o código cristalino e simplifica o acompanhamento de mudanças.

Recursos Úteis

  1. Como Lidar com Vários Botões de Envio no ASP.NET MVC? - Stack Overflow — uma análise de problemas específicos e soluções relacionadas ao trabalho com botões no contexto do ASP.NET MVC.
  2. Visão Geral de Exemplos de Código | Microsoft Learn — vários exemplos oficiais de vinculação de modelos no ASP.NET MVC.
  3. Vinculação de Modelo a uma Lista | Você Foi Chateado — peculiaridades da vinculação de modelo para coleções no ASP.NET MVC.
  4. Artigos | InformIT — recursos valiosos sobre o uso do helper BeginForm no ASP.NET MVC.
  5. C# Corner: Seletores de Ação MVC no ASP.Net MVC — uma análise detalhada dos seletores de ação no ASP.NET MVC e abordagens para seu manejo.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!