Usuário com melhor resposta
Exibir partial view de outro controller

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