Usuário com melhor resposta
Problemas para implementar um dorpdownlist no MVC

Pergunta
-
Boa tarde a todos/as,
Estou tentando pegar as informações da minha camada de modelos com a classe abaixo:
//
// View Classes Model
public class EmpresaFormViewModel
{
// Properties
public Empresa empresa { get; private set; }
public SelectList tipoContrato { get; private set; }
// Constructor
public EmpresaFormViewModel(Empresa Empresa)
{
empresa = Empresa;
tipoContrato = new SelectList(IEnumerable<TipoContrato>(empresa.cod_tipo_contrato));
ViewData["TipoContrato"] = tipoContrato;
}
}
Mas o "IEnumerable" fica marcado de vermelho dizendo que "is a type, but is used like a variable".
E o "ViewData" fica marcado de vermelho dizendo que "does not exist in the current context".
Na minha camada view eu coloquei assim:
<p>
<label for="cod_tipo_contrato">Tipo de Contrato:</label>
<%= Html.DropDownList("TipoContrato", this.ViewData["TipoContrato"] as SelectList, "Selecione um tipo de contrato") %>
<%= Html.ValidationMessage("TipoContrato", "*") %>
</p>
Quando eu executo e tento adicionar, ele dá erro apontando para o selectlist com erro.
Não sei como funciona e nem como implementa ele, por favor alguem pode me ajudar?
preciso saber como funcionam o select list e o ienumerable para eu pegar as informações de uma tabela e usar no dropdownlist e depois gravar a informação selecionada no campo da outra tabela.
Muito obrigado.- Movido C. Augusto Proiete [MVP]Moderator sexta-feira, 2 de outubro de 2009 00:42 Movendo para fórum apropriado (De:ASP .NET)
Respostas
-
ao meu ver o objeto tipocontratorep nao foi instanciado
Marco Souza ________________________________________________________ Não esqueça de marcar o post como útil caso tenha te ajudado.- Marcado como Resposta joaoluizbt segunda-feira, 31 de agosto de 2009 16:57
Todas as Respostas
-
-
-
Olá João,
Da uma olhada nesta dica http://www.danielfonsecacastro.com.br/post/2009/08/11/Dica-Html-Helper-DropDownList-e-ViewData.aspx
Se a resposta for útil por favor não esqueça de marca.
Abraços,
Daniel Fonseca Castro
www.danielfonsecacastro.com.br
twitter -
Desta forma nao tenho nenhum erro de compilação, a tela de adicionar aparece, eu clico no botão adicionar, aí aparece a seguinte mensagem de erro:
Referência de objeto não definida para uma instância de um objeto.E marca de amarelo toda a linha:
tiposContrato = new SelectList(tipocontratorep.SelecionarTodos());
Eu tenho um arquivo de repositorio que faz a conexão com o datacontext e faz a seleção dos dados da tabela:Eu tentei seguir os exemplos que voces enviaram, mas nao deu certo, por favor, me ajudem...
Não sei o que estou fazendo de errado.
Muito obrigado.public
{
private HeraSupportDataContext db = new HeraSupportDataContext();
//
// M‚todos de pesquisa
public IQueryable<Empresa> SelecionarTodas()
{
return db.Empresas;
}
}
Ou seja, com o método SelecionarTodas() eu pego todas as informações da tabela.
em outro arquivo, o de controlle, eu crio uma classe para visualização do modelo e retornar para a camada view os dados coletados do repositório. eu crio uma variavel do tipo repositorio e outra do tipo lista, no construtor eu preencho a lista com o metodo de selecionar todos do objeto de repositorio. isto está correto?namespace
{
//
// View Classes Model
public class EmpresaFormViewModel
{
// Properties
public Empresa empresas { get; private set; }
public TipoContratoRepositorio tipocontratorep;
public LicenciadaRepositorio licenciadarep;
public SelectList tiposContrato { get; private set; }
public SelectList licenciadas { get; private set; }
// Constructor
public EmpresaFormViewModel(Empresa Empresas)
{
empresas = Empresas;
tiposContrato = new SelectList(tipocontratorep.SelecionarTodos());
licenciadas = new SelectList(licenciadarep.SelecionarTodas());
}
//
// Controller Class
public class EmpresaController : Controller
{
EmpresaRepositorio EmpresaRepositorio = new EmpresaRepositorio();
//
// GET: /Empresa/Adicionar
[Authorize]
public ActionResult Adicionar()
{
Empresa Empresa = new Empresa();
if (User.Identity.Name == null)
return View("InvalidUser");
return View(new EmpresaFormViewModel(Empresa));
}
//
// POST: /Empresa/Adicionar
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Adicionar(Empresa Empresa)
{
if (User.Identity.Name == null)
return View("InvalidUser");
{
try
{
EmpresaRepositorio.Adicionar(Empresa);
EmpresaRepositorio.Salvar();
return RedirectToAction("Detalhe", new { id = Empresa.cod_empresa });
}
catch
{
ModelState.AddModelErrors(Empresa.GetRuleViolations());
return View(new EmpresaFormViewModel(Empresa));
}
}
}
}
}
}
E o view está da seguinte forma:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<HeraSupport.Controllers.FormViewModel>" %>
<%= Html.ValidationSummary("Por favor, corrija os erros e tente novamente.")%>
<% using (Html.BeginForm()) {%>
<fieldset>
<p>
<label for="cod_tipo_contrato">Tipo de Contrato:</label>
<%= Html.DropDownList("tiposContrato", this.ViewData["tiposContrato"] as SelectList, "Selecione um tipo de contrato") %>
<%= Html.ValidationMessage("TipoContrato", "*") %>
</p>
<p>
<label for="cod_licenciada">Empresa Licenciada:</label>
<%= Html.DropDownList("licenciadas", this.ViewData["licenciadas"] as SelectList, "Selecione uma empresa licenciada") %>
<%= Html.ValidationMessage("licenciadas", "*") %>
</p>
<div>
<a href="/empresa"><img src="../../Content/img/voltar.jpg" alt="Voltar às empresas" class="image" /></a>
<input type="image" src="../../Content/img/salvar.jpg" alt="Salvar" class="image"/>
</div>
</fieldset>
<% } %> -
ao meu ver o objeto tipocontratorep nao foi instanciado
Marco Souza ________________________________________________________ Não esqueça de marcar o post como útil caso tenha te ajudado.- Marcado como Resposta joaoluizbt segunda-feira, 31 de agosto de 2009 16:57
-
Blz, marco.
Eu entro na tela para adicionar, seleciono as opções direitinho, mas quando vou salvar ele continua na tela, e quando eu volto para verificar a listagem das empresas cadastradas, nao aparece nenhuma, parece que não está salvando...
Agora a tela de adicionar empresa está aparecendo com estas alterações, porém nao consigo salvar.
//
// View Classes Model
public class EmpresaFormViewModel
{
// Properties
public Empresa empresas { get; private set; }
public TipoContratoRepositorio tipocontratorep = new TipoContratoRepositorio();
public LicenciadaRepositorio licenciadarep = new LicenciadaRepositorio();
public SelectList tiposContrato { get; private set; }
public SelectList licenciadas { get; private set; }
// Constructor
public EmpresaFormViewModel(Empresa Empresas)
{
empresas = Empresas;
tiposContrato = new SelectList(tipocontratorep.SelecionarTodos(),"cod_tipo_contrato", "descricao");
licenciadas = new SelectList(licenciadarep.SelecionarTodas(), "cod_licenciada", "nome");
}
}