Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Abrir modal a partir do controler

Olá!! É possivel abrir uma tela modal a partir de um controler? Tentei pelo "return PartialView()" , mas não consegui!

Um exemplo de modal é este: https://www.w3schools.com/bootstrap/bootstrap_modal.asp

Gostaria de usar a PartialView porque quero passar dados para o modal!

3 respostas

Olá Rene,

como ficaram os seus cshtmls (tanto o que importa a partial view quanto a própria partial) e o seu controller?

Olá Lucas! A view ficou assim:

@model IEnumerable<EmpresaERP.Model.ClientesERP>
     @{
        ViewData["Title"] = "Index";
    }
     <table class="table">
        <thead>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.CNPJ )
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.ContribuinteOuConsumidorFinal )
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.pessoaFisicaOuJuridica )
                </th>

                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model )
{
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.CNPJ )
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.ContribuinteOuConsumidorFinal)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.pessoaFisicaOuJuridica)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.pessoaFisicaOuJuridica)
                    </td>

                    <td>
                        <a asp-controller="ClientesERP" asp-action="Details" asp-route-id="@item.CNPJ">Details</a> 
                        <a asp-controller="ClientesERP" asp-action="DeleteConfirmed" asp-route-id="@item.CNPJ">Delete</a>

                    </td>
                </tr>
            }
        </tbody>
    </table>

Chamo o controler Details, nele gostaria de abrir o modal com os dados, e não a pagina Details com os dados: O controler é este:

        [HttpGet]
        public IActionResult Details(string id)
        {
            if (id == null)
            {
                return NotFound();
            }
            ClientesERP cliente = objClientes.GetDataCliente (id);

            if (cliente == null)
            {
                return NotFound();
            }
            return View(cliente);
        }
solução!

Quando estamos trabalhando com o modal é um código css e js do bootstrap que fazem o trabalho na mesma tela. O problema é que como você está usando o

<a asp-controller="ClientesERP" asp-action="Details" asp-route-id="@item.CNPJ">Details</a>

ele sempre estará na verdade redirecionando para outra tela.

Uma solução é trocar a tag a por uma button e marcar esta button com os atributos do modal, como o data-target. Além disso, nesta mesma View que você me mandou ai em cima, já colocar o código que está provavelmente na Datails.cshtml. No caso a ideia é que não será disparada uma nova requisição para um controller, logo na primeira tela tudo já é carregado. E o js cuida de mostrar ou esconder o que precisa.

Neste link aqui tem um exemplo de um modal. Note como o código todo está no mesmo html, mas toda a <div class="modal fade" id="myModal" role="dialog"> fica escondida até a hora que você clica no botão.