Usuário com melhor resposta
Ajuda para carregar DropDownList no MVC

Pergunta
-
Bom Dia,
Estou com um problema aqui no MVC.
Tenho uma pagina q carrega um determinado dado de uma linha do banco e joga cada dado em TextBox. Quero trocar o primeiro TextBox (ID) por DropDownList, para que o usuário tenha a opão de ver e escolher a partir de uma lista, sem precisar digitar.
Agradeço a atenção e ajuda.
Eis o código:
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="UserID">UserID:</label>
<%= Html.TextBox("UserID", Model.usuarioReference.EntityKey.EntityKeyValues[0].Value) %>
<%= Html.ValidationMessage("UserID", "*") %>
</p>
<p>
<label for="Descricao">Descricao:</label>
<%= Html.TextBox("Descricao", Model.Descricao) %>
<%= Html.ValidationMessage("Descricao", "*") %>
</p>
<p>
<label for="Nome">Nome:</label>
<%= Html.TextBox("Nome", Model.Nome) %>
<%= Html.ValidationMessage("Nome", "*") %>
</p>
<p>
<label for="CentroCustoIDPai">CentroCustoIDPai:</label>
<%= Html.TextBox("CentroCustoIDPai", Model.centrocusto2Reference.EntityKey.EntityKeyValues[0].Value) %>
<%= Html.ValidationMessage("CentroCustoIDPai", "*") %>
</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
Iterar é humano, a recursão é divina. Espero ter ajudado, att.- Movido C. Augusto Proiete [MVP]Moderator sexta-feira, 2 de outubro de 2009 00:42 Movendo para fórum apropriado (De:ASP .NET)
Respostas
-
Olá Varito,
Então se você utilizar o First ele sempre vai trazer o primeiro o correto seria utilizar o Where por exemplo
ViewData["UserID"] = new SelectList(_entities.usuarioSet, "UserID", "Login", _entities.usuarioSet.Where(user => user.UserID == key).FirstOrDefault());
Se a resposta for útil por favor não esqueça de marca.
Abraços,
Daniel Fonseca Castro
www.danielfonsecacastro.com.br
twitter- Marcado como Resposta alvarok terça-feira, 21 de julho de 2009 20:43
Todas as Respostas
-
Olá Varito,
A forma mais facil de resolver esse problema é utilizar ViewModel Pattern .
Nesse link http://nerddinnerbook.s3.amazonaws.com/Part6.htm , tem um exemplo de como você pode fazer isso se tiver dificuldades na implementação é só avisa!
Se a resposta for útil por favor não esqueça de marca.
Abraços,
www.danielfonsecacastro.com.br
Daniel Fonseca Castro -
Bah, seguinte....
Dei uma olhada melhor no exemplo e tal, até tinha como baixar o código. Mas ele usa aquele item que é um link pro sql(.dbml), só que o banco que tenho estou usando aqui em MySql, aí quando arrasto as tabelas ele dá erro.
Sabes alguma alternativa??
Valeu, abraço
Iterar é humano, a recursão é divina. Espero ter ajudado, att. -
Olá Varito,
MySql com linq não sei se é possível!
Mais de qualquer forma provavelmente você deve estar trabalhando com ADO.NET certo ? Então não muda nada só substitui o linq pelo ADO.NET
Se a resposta for útil por favor não esqueça de marca.
Abraços,
Daniel Fonseca Castro
www.danielfonsecacastro.com.br
twitter -
É, estou usando ADO.NET.
eu consegui fazer da seguinte maneira no cs:
ViewData["UserID"] = new SelectList(_entities.usuarioSet, "UserID", "Login"); (onde o valor do campo eh o ID, mas mostra o login)
e no html:
<%= Html.DropDownList("UserID", ViewData["UserID"] as SelectList)%>
Funcionou tranquilo. O problema agora eh outro, que não entendo como não está funcionando. No código no cs onde estou estanciando uma SelectList. Na definição de um dos overloads ele recebe 4 parametros, e o quarto seria o valor selecionado que seria mostrado no DropDownList, porém não está funcionando. Pois quando o DropDownList é exibido eu preciso que ele inicie selecionado no usuario que salvou aquele dado.
Não sei se expliquei bem, mas se tiver alguma ajuda, agradeço, daí mato esse questão.
Iterar é humano, a recursão é divina. Espero ter ajudado, att. -
Olá Varito,
O primeiro parâmetro "_entities.usuarioSet" retorna um IEnumerable de algum tipo do seu modelo pelo nome é um IEnumerable de Usuario certo?
O ultimo parâmetro deve ser uma instancia do objeto Usuario, esse objeto deve sair do IEnumerable do primeiro parâmetro!
Se a resposta for útil por favor não esqueça de marca.
Abraços,
Daniel Fonseca Castro
www.danielfonsecacastro.com.br
twitter -
Entendi...
Mas não to conseguindo, to tentando.
Tentei isso, mas o DropDown continua retornando como selecionado o primeiro elemento:
centrocusto ccust = _entities.centrocustoSet.First(cencust => cencust.CentroCustoID == id);
int key = Convert.ToInt32(ccust.usuarioReference.EntityKey.EntityKeyValues.First().Value);
ViewData["UserID"] = new SelectList(_entities.usuarioSet, "UserID", "Login", _entities.usuarioSet.First(user => user.UserID == key));
Iterar é humano, a recursão é divina. Espero ter ajudado, att. -
Olá Varito,
Então se você utilizar o First ele sempre vai trazer o primeiro o correto seria utilizar o Where por exemplo
ViewData["UserID"] = new SelectList(_entities.usuarioSet, "UserID", "Login", _entities.usuarioSet.Where(user => user.UserID == key).FirstOrDefault());
Se a resposta for útil por favor não esqueça de marca.
Abraços,
Daniel Fonseca Castro
www.danielfonsecacastro.com.br
twitter- Marcado como Resposta alvarok terça-feira, 21 de julho de 2009 20:43
-
Bom, Tentatei o exemplo também.
consegui resolver desta maneira (para quem vier a precisar):
contacorrente ccorr = _entities.contacorrenteSet.FirstOrDefault(concorr => concorr.ContaCorrenteID == id);
int key = Convert.ToInt32(ccorr.usuarioReference.EntityKey.EntityKeyValues.First().Value);
ViewData["UserID"] = new SelectList(_entities.usuarioSet, "UserID", "Login", key);
return View(ccorr);
e fiz uma mudança no html, bem simples:
<%= Html.DropDownList("UserID")%>
Amigo Daniel, Agradeço toda a ajuda e tempo.
Iterar é humano, a recursão é divina. Espero ter ajudado, att.