Pergunta

Eu estou apenas querendo saber onde as pessoas estão criando seu SelectList - na ação ou a vista.

Eu vi exemplos de ambos e aquele que faz mais sentido para mim é fazê-lo na ação e ter o modelo de exibição tem uma propriedade do tipo SelectList.

exemplos Por outro lado, eu vi onde as pessoas têm o modelo de exibição tem uma propriedade de SelectList eo SelectList é preenchido dentro do modelo de vista (ou no construtor ou através de carregamento lento). Eu gosto desta idéia, pois significa que há menos código em minhas ações ...

Em suma, eu só estava me perguntando o que as pessoas estão fazendo atm.

Felicidades Anthony

Foi útil?

Solução

Crie a sua SelectList no controlador (por olhando para cima sua lista de itens do seu repositório de modelos), e passá-lo para o ponto de vista tanto como um objeto ViewData, ou como parte de seu ViewModel fortemente tipado.

Outras dicas

IT'S um aspecto específico da apresentação, então eu prefiro fazê-lo na Vista, usando um HTML helper. Então eu passar uma coleção à vista e usar um método html helper para mapear os itens para SelectListItems. O método poderia olhar muito parecido com isto:

public static IList<SelectListItem> MapToSelectItems<T>(this IEnumerable<T> itemsToMap, Func<T, string> textProperty, Func<T, string> valueProperty, Predicate<T> isSelected)
{
    var result = new List<SelectListItem>();

    foreach (var item in itemsToMap)
    {
        result.Add(new SelectListItem
        {
            Value = valueProperty(item),
            Text = textProperty(item),
            Selected = isSelected(item)
        });
    }
    return result;
}

Cumprimentos.

Eu normalmente criar a minha SelectList na camada ação ou serviço e passá-lo para meu ponto de vista via ViewData. Eu também fez parte de um modelo de vista e uma visão fortemente digitado. Ambas as formas criá-lo na camada de ação ou serviço embora.

Eu tenho o SelectList exposta como uma propriedade no modelo de vista e preenchê-lo na ação usando o repositório necessário. Eu acho que o código que interage diretamente com os repositórios deve ser aquele que também é responsável com o preenchimento, seja ele as ações do controlador ou camada de serviço ou qualquer outra coisa.

Eu não acho que preencher a lista directamente a partir do modelo de vista é uma boa idéia, porque exigiria o modelo de vista a ter uma dependência repositório e fazer interações de banco de dados eo modelo de vista não deve ser responsável por este tipo de coisas.

Você também pode criar um separar objeto especial, chamado Initializer ou algo parecido, que faz todo o povoamento e inicializações, se você tiver vários campos selectList e quiser manter o seu código mais limpo acções.

Nem, criá-lo em uma classe separada, veja aqui Como mapear Ver Modelo de volta ao modelo de domínio em uma ação POST?

Eu uso uma interface IBuilder no controlador e fazer todo o edifício de entidades / viewmodels na implementação deste Builder

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top