Inquiridor
Partial View - Cadastrar na view e listar na partial view

Pergunta
-
Todas as Respostas
-
-
o problema é que quando retorno uma lista na partial e a view está esperando uma model. ]
assim:
view para cadastro.
@model HondaPosVenda.Models.DepartamentoViewModel
@using (Html.BeginForm("Departamento", "Usuario", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) <h1>Departamento</h1> <span class="action">Novo Cadastro</span><br /> <fieldset> <table border="0" width="100%"> <tr> <td width="26%"> <label>Tipo </label> <input name="w2" type="checkbox" value="w2" class="checkbox" title="2W" @(Model.Sistema2w == "w2" ? "checked=\"checked\"" : "") /> <label>2W</label> <input name="w4" type="checkbox" value="w4" class="checkbox" title="4W" @(Model.Sistema4w == "w4" ? "checked=\"checked\"" : "") /> <label>4W</label> <font size="1" color="red"><strong >@ViewData["Empresas"]</strong></font> </td> <td> <label>Departamento </label> @Html.TextBox("departamentoViewModel.DesSetor", "", new { @class = "textbox width250", id = "Departamento", @title = "Departamento" }) @Html.ValidationMessageFor(model => model.DesSetor) </td> <td width="22%"> <label>Fale Conosco </label> <input type="radio" name="departamentoViewModel.flg_FaleConosco" value="@(Model.flg_FaleConosco = true)" checked="checked" class="radio" title="Sim" /> <label>Sim</label> <input type="radio" name="departamentoViewModel.flg_FaleConosco" value="departamentoViewModel.flg_FaleConosco" class="radio" title="Não" /> <label>Não</label> </td> </tr> <tr> <td colspan="3" class="center"> <br /><input type="image" src="@(Common.Util.Root)Content/themes/base/images/bt_salvar.jpg" alt="Salvar" title="Salvar" /> @*<img src="@(Common.Util.Root)Content/themes/base/images/bt_salvar.jpg" alt="Salvar" title="Salvar" />*@ </td> </tr> </table> </fieldset> Aqui eu renderizo a partial: @Html.Partial("DepartamentoPartial", Model.listaDepartamento)
Controller
public ActionResult Departamento() { var model = new DepartamentoViewModel { listaDepartamento = _setorSistema.GetAll().ToList() }; return View(model); }
viewmodel
public partial class DepartamentoViewModel { public int id_Setor { get; set; } public string DesSetor { get; set; } public bool flg_FaleConosco { get; set; } public Int16 Id_Sistema { get; set; } public string Sistema { get; set; } public string Sistema2w { get; set; } public string Sistema4w { get; set; } public List<SetorSistema> listaDepartamento { get; set; } }
Minha Partial view
@model IEnumerable<HondaPosVenda.Models.DepartamentoViewModel>
<table> <tr> <th> Site </th> <th> Departamento </th> <th> Fale Conosco </th> <th> Ações </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @item.Sistema </td> <td> @item.DesSetor </td> <td> @item.flg_FaleConosco </td> </tr> } </table>
ou seja eu retorno uma lista, mas preciso esperar uma model para cadastrar por isso gera o erro.
Queria saber uma forma de Cadastrar e listar com uma partial view na mesma tela.
Grato,
-
-
-
Na Ver Minha ta ASSIM
@ HPecas.Models.DepartamentoViewModel modelo
na Minha parcial ta ASSIM
@ Model IEnumerable <HPecas.Models.DepartamentoViewModel>
porqué Na Ver eu Preciso Cadastrar e na Listar Vai parcial.
- Editado cleiton costa quarta-feira, 29 de janeiro de 2014 17:52
-
Olá Cleiton!,
Deixa ver se entendi oque vc quer fazer.
Você quer cadastrar um departamento e logo depois, quer ver uma lista como os departamentos cadastrados (incluindo o ultimo cadastro), embaixo do formulario de cadastro mas sem sair da View de cadastro. ¿É isso?
-
-
Você pode utilizar um framework JS chamado KnockouJS no VS2012 tem um exemplo bem prático de como fazer isso.
Através dele, vc terá um bind automática da nova lista quando for adicionado na lista (view).
Lembrando que você pode daí optar de 2 maneiras para atualizar no controller. Uma é definindo um botão que recuperará a model da view e fará a inserção. ou via ajax.
a solução via ajax, serve tbm para vc retornar a nova partialview e substituir essa grid -
E ae Cleiton!
Aqui tenho um exemplo basico que vc pode usar:
No controller
[HttpGet] public ActionResult Cadastrar() { var model = new DepartamentoViewModel { listaDepartamento = _setorSistema.GetAll().ToList() }; return View(model); } [HttpPost] public ActionResult Cadastrar() { /// sua logica paqra cadastrar o departamento return RedirectToAction("CadastrarPartial","NomeController"); } [HttpGet] public ActionResult CadastrarPartial() { //sua logica para exibir os dados e carregar o Model return PartialView(Model); }
Na View
@using (Ajax.BeginForm("Cadastrar", "NomeController", FormMethod.Post, new AjaxOptions { UpdateTargetId = "lista" })) { @* aqui vai a logica do seo formulario, todos os controles *@ <input type="submit" value="Cadastrar" /> } <div id="lista"> @Html.Action("NomeAction", "NomeController") </div>
Boa sorte :)
- Editado Richof sábado, 1 de fevereiro de 2014 03:48