Tenho muitas tabelas auxiliares com, por exemplo, nomes de cidades.
Como esse tipo de tabela sofre inserção de novos itens no começo mas depois passa não sofrer mais alterações com frequência, pensei em carregar o conteúdo em SelectLists e armazenar essas listas em Session.
Assim, eu teria listas já carregadas na memória e só atualizaria essas listas se houvesse o cadastro de um novo ítem na tabela.
É uma boa estratégia? Tem algum inconveniente?
Então eu fiz um DAO que carrega a lista de Cidades:
public SelectList ListaParaDropDown()
{
var cidades = db.Cidades
.Select(u => new
{
Text = u.Nome + " (" + u.Estado + ")",
Value = u.ID
}).ToList();
SelectList lista = new SelectList(cidades.OrderBy(x => x.Text), "Value", "Text");
return lista;
}
E o resultado desse método vai para a Session já na entrada do Sistema:
public void CarregarListasGlobais()
{
Session["ListaCidades"] = new CidadesDAO().ListaParaDropDown();
Funcionou, mas tive um problema que reside no fato de que em telas de EDIÇÃO, eu precisaria selecionar o registro já escolhido anteriormente e que está gravado.
E parece que não há uma forma de setar o SelectedValue a não ser na montagem do SelectList. E para isso eu teria de ir ao banco novamente e fazer um :
public SelectList ListaParaDropDown(int? id)
{
var cidades = db.Cidades
.Select(u => new
{
Text = u.Nome + " (" + u.Estado + ")",
Value = u.ID
}).ToList();
SelectList lista = new SelectList(cidades.OrderBy(x => x.Text), "Value", "Text", id);
return lista;
}
E praticamente não valeria a pena todo esse esforço.
Tentei pegar a lista já criada da Session e setar o Valor Selecionado dela usando:
lista.SelectedValue(id);
mas não funciona mesmo havendo esse método no SelectList.
Alguma sugestão???