Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Criar Validação antes da asp-action

Criei um pequeno programa no visual studio para adicionar livros em uma determinada tabela, este programa está criando os livros corretamente porém, quero incluir validação para nao deixar incluir um livro na tabela sem um titulo. Ao incluir validações utilizando o JS não estou conseguindo executar o asp-action apenas quando todos os campos estão preenchidos. Segue exemplo:

@model livros.Models.livros @{ ViewData["Title"] = "Crir Livro"; }


<section id="section-form">
    <form id="form-criar"> ( Retirei o asp-action desse ponto para tentar incluir diretamente no JS)
        <div class="row">
            <div class="col-md-12">

                <div class="form-group">
                    <label asp-for="Titulo">Titulo</label>
                    <input asp-for="Titulo" type="text" class="form-control" id="input-titulo">
                    <span asp-validation-for="Titulo" class="text-danger"></span>
                </div>

                <div class="form-group">
                    <label asp-for="Autor">Autor</label>
                    <input asp-for="Autor" type="text" class="form-control">
                    <span asp-validation-for="Autor" class="text-danger"></span>
                </div>

            </div>
        </div>

        <div class="form-group">
            <input type="submit" id="btn-criar" value="Salvar" class="btn btn-success" />
        </div>


    </form>
</section>

<script src="~/js/valid-livro.js"></script>

------------------------- Codigo JS:

var btnCriar = document.querySelector("#btn-criar");
btnCriar.addEventListener("click", function (event) {
    event.preventDefault();


    if (!document.getElementById("input-titulo").value.length == 0) {

        var frmCriar = document.querySelector("#form-criar");
        frmCriar.setAttribute("asp-action", "NovoLivro");
        console.log(frmCriar);

    }

})

--------------------- Dessa forma Ele cria o atributo asp-action no html (exemplo abaixo) mas não executa o asp-action, como faço para mandar executar essa asp-action?

<form id="form-criar" asp-action="NovoLivro">
1 resposta
solução!

Oi José, tudo bem? Desculpa a demora para responder!

Isso acontece porque quando você adiciona o atributo asp-action no formulário, você já deu o clique no botão para ele ser enviado e não será executado esse asp-action mesmo, pois está adicionando depois que você clica. E mesmo se clicar de novo, ele irá criar novamente esse atributo.

Eu não conheço muito bem o ASP.NET, para você fazer o redirect de alguma coisa, você pode utilizar no Javascript:

window.location.href = "your/url";

A sua URL pode ser algo do tipo /NovoLivro. Você pode ler mais sobre aqui.

Ou também, para verificar se o campo é vazio, você pode utilizar um atributo chamado required, em que o próprio HTML fará a verificação desse campo, se ele for vazio, ele não deixa enviar o formulário. Veja abaixo como ficaria:

<input asp-for="Titulo" type="text" class="form-control" id="input-titulo" required>

Espero ter ajudado, bons estudos =)