none
Exibir partial view de outro controller RRS feed

  • Pergunta

  • Tenho a seguinte estrutura :

    Controller ("Pedido","Usuario","UsuarioPedido")

    Tenho a necessidade de na view create do controller "Pedido" ter um botão onde quando clicado vou ter que ir no controller "Usuário" para exibir os usuários, e ter outro botão "Gravar" quando clicado gravar o pedido e pegar os usuários listado e gravar na tabela "UsuarioPedido".

    Criei uma partial view na pasta Shared onde essa partial view é vinculada ao controller "usuario"(listar o usuário), quando executo a view create dá um erro "Objeto não esta configurado para uma instancia de um objeto".

    Queria saber qual a melhor forma de fazer isso.


    Junior

    segunda-feira, 9 de maio de 2016 13:33

Respostas

  • Conseguir fiz assim :

    Na view create 

    @{Html.RenderAction("UsuarioPedido", "USUARIO");}

    e no controller mudei a consulta.

    Agora o que preciso é que essa table só apareça quando eu clicar em um botão.


    Junior

    • Marcado como Resposta Junior_luiz terça-feira, 10 de maio de 2016 11:11
    segunda-feira, 9 de maio de 2016 18:19

Todas as Respostas

  • Bom dia,

    Poderia postar o código onde dá o erro? Assim ficaria mais fácil entender e ajudar a solucionar o problema. Provavelmente algum objeto não possui instância.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    segunda-feira, 9 de maio de 2016 13:51
  • Silvaney o problema está na view "create" do Pedido fiz assim :

    Chamada da partial view na view create

    @Html.Partial("~/Views/Shared/_UsuarioPedido.cshtml")

    View _UsuarioPedido

    @model IEnumerable<MVCEstudante.Models.USUARIO>

    O problema está ai pq na view create "Pedido" e na partial aponta para o controller "usuario".

    @model MVCEstudante.Models.PEDIDO

    Deu para entender ? fiz certo ?


    Junior

    segunda-feira, 9 de maio de 2016 13:58
  • Bom dia,

    Junior, acredito que entendi o problema. Sua "partial view" deve receber um pedido como retorno. Você criou uma action (que retorna um objeto Pedido) para sua PartialView ?
    Segue um exemplo:

    @{Html.RenderAction("ActionName", "ControllerName");}
    public ActionResult ActionName()
    {
        return PartialView("~/Views/Shared/_PartialAluno.cshtml", new Pedido());
    }

    Espero ter ajudado.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    segunda-feira, 9 de maio de 2016 14:52
  • Silvaney não deu certo o erro continua fiz assim

    no controller "Usuario"

    public PartialViewResult UsuarioPedido(int? tipopedido)
            {
                var codempr = Convert.ToInt32(HttpContext.Session["usuarioLogadoID"]);
                var result1 = (from tu in db.USUARIO
                               where tu.cli_id == codempr &&
                                     tu.usu_data_excluido == null &&
                                     tu.usu_habilitado_pedido == 1
                               orderby tu.usu_nome
                               select new
                               {
                                   tu.usu_id,
                                   tu.usu_matricula,
                                   tu.usu_nome,
                                   tu.usu_tipo, 
                                   tu.usu_valor_pedido,
                                   tipousuario = tu.usu_tipo == 2 ? "Avulso" :
                                                tu.usu_tipo == 3 ? "Estudante" : ""
                               }).ToList(); 
                if (tipopedido != 1)
                {
                    result1 = result1.Where(u => u.usu_tipo == tipopedido).ToList();  
                }
                
                return PartialView("~/Views/Shared/_UsuarioPedido.cshtml");
            }

    na view Create ("Pedido")

    @model MVCEstudante.Models.PEDIDO
    
    @{
        ViewBag.Title = "Create";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <div class="container-fluid">
        <h1 class="ls-title-intro ls-ico-pencil2">Pedido</h1>
        
            @Html.AntiForgeryToken()
    
            <div class="ls-form ls-form-horizontal row">
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    
                <fieldset>
                    <div class="ls-label col-md-2 col-xs-6">
                        @Html.LabelFor(model => model.ped_tipo)
                        <div>
                            @Html.EditorFor(model => model.ped_tipo, new { htmlAttributes = new { @class = "ls-field" } })
                            @Html.ValidationMessageFor(model => model.ped_tipo, "", new { @class = "text-danger" })
                        </div>
                    </div>
    
                    <div class="ls-label col-md-6 col-xs-10">
                        @Html.LabelFor(model => model.dep_id, "Departamento")
                        <div>
                            @Html.DropDownList("dep_id", null, htmlAttributes: new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.dep_id, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </fieldset>
    
                <fieldset>
                    <div class="ls-label col-md-4 col-xs-6">
                        @Html.LabelFor(model => model.ped_periodo_inicial)
                        <div>
                            @Html.EditorFor(model => model.ped_periodo_inicial, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.ped_periodo_inicial, "", new { @class = "text-danger" })
                        </div>
                    </div>
    
                    <div class="ls-label col-md-4 col-xs-6">
                        @Html.LabelFor(model => model.ped_periodo_final)
                        <div>
                            @Html.EditorFor(model => model.ped_periodo_final, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.ped_periodo_final, "", new { @class = "text-danger" })
                        </div>
                    </div>
    
                    <div class="ls-label col-md-2 col-xs-6">
                        @Html.LabelFor(model => model.ped_referencia)
                        <div>
                            @Html.EditorFor(model => model.ped_referencia, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.ped_referencia, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </fieldset>
    
                <div class="ls-actions-btn">
                    <a href="#" onclick="UsuarioPedido();" class="btn btn-default">Exibir Usuários</a>
                </div>
    
            </div>
            <div id="usuario" class="ls-display-none">
                @{Html.RenderAction("UsuarioPedido", "USUARIO");}
            </div>
    
        <div>
            @Html.ActionLink("Voltar", "Index")
        </div>
    </div>

    Na partialView (/view/shared/_usuarioPedido) "O erro é aqui no foreach"

    @model IEnumerable<MVCEstudante.Models.USUARIO>
    
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.usu_matricula)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.usu_nome)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.usu_tipo)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.usu_valor_pedido)
            </th>
        </tr>
    
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.usu_matricula)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.usu_nome)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.usu_tipo)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.usu_valor_pedido)
                </td>
            </tr>
        }
    
    </table>
    


    Junior

    segunda-feira, 9 de maio de 2016 17:13
  • Boa tarde,

    Faltou o retorno da lista na PartialViewResult UsuarioPedido.

    return PartialView("~/Views/Shared/_UsuarioPedido.cshtml", result1);

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    segunda-feira, 9 de maio de 2016 17:26
  • O erro é o mesmo :

    Object reference not set to an instance of an object.
    
    @foreach (var item in Model)


    Junior

    segunda-feira, 9 de maio de 2016 17:34
  • Boa tarde,

    Junior, você vai precisar depurar a aplicação pra descobrir onde esta o erro.
    Clique na linha "Foreach" e tecle "F9", faça este mesmo procedimento na PartialViewResult, pra você ver o que esta retornando.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    segunda-feira, 9 de maio de 2016 18:03
  • Conseguir fiz assim :

    Na view create 

    @{Html.RenderAction("UsuarioPedido", "USUARIO");}

    e no controller mudei a consulta.

    Agora o que preciso é que essa table só apareça quando eu clicar em um botão.


    Junior

    • Marcado como Resposta Junior_luiz terça-feira, 10 de maio de 2016 11:11
    segunda-feira, 9 de maio de 2016 18:19