none
Ajuda para carregar DropDownList no MVC RRS feed

  • 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.
    sexta-feira, 17 de julho de 2009 12:57

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
    terça-feira, 21 de julho de 2009 19:50

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
    • Marcado como Resposta alvarok sexta-feira, 17 de julho de 2009 17:03
    • Não Marcado como Resposta alvarok segunda-feira, 20 de julho de 2009 19:14
    sexta-feira, 17 de julho de 2009 14:49
  • 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.
    segunda-feira, 20 de julho de 2009 19:18
  • 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
    terça-feira, 21 de julho de 2009 11:31
  • É, 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.
    terça-feira, 21 de julho de 2009 17:11
  • 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
    terça-feira, 21 de julho de 2009 17:52
  • 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.
    terça-feira, 21 de julho de 2009 19:27
  • 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
    terça-feira, 21 de julho de 2009 19:50
  • 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.
    terça-feira, 21 de julho de 2009 20:42