Como posso definir o valor selecionado de um Html.DropDownListFor? Estive dando uma olhada online e vi que isso pode ser alcançado usando o quarto parâmetro, assim como o abaixo:
@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0), "Please select a country")
Minha lista de seleção é exibida assim:
<select id="ShipFromCountries" name="ShipFromCountries">
<option value="">Please select a country</option>
<option value="GB">United Kingdom</option>
<option value="US">United States</option>
...
</select>
Mas, por algum motivo, o Reino Unido continua selecionado, mas eu quero que "Selecione um país" seja selecionado.
Alguém sabe como posso conseguir isso?
EDITAR
Eu atualizei meu código, pois houve uma ligeira mudança na funcionalidade, mas ainda pareço estar encontrando esse problema. Isto é o que penso:
@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
1
é o Id do option
que desejo selecionar, também tentei com o texto do option
mas também não funciona.
Alguma ideia?
fonte
OrderTemplates
está tentando vincular a umaViewBag
propriedade que é typeofIEnumerabe<SelectListItem>
. Mas um<select>
elemento não pode ser vinculado a uma coleção de objetos complexos (apenas um tipo de valor)Para mim não estava funcionando então funcionou desta forma:
Controlador:
Visão:
JQuery:
fonte
Quando você passa um objeto como este:
você está dizendo: a Fonte (
Model
) e Chave ("Code"
) o Texto ("Name"
) e o valor selecionado0
. Provavelmente, você não tem um0
valor em sua fonte deCode
propriedade, portanto, o HTML Helper selecionará o primeiro elemento para passar o real selectedValue para este controle.fonte
Certifique-se de ter aparado o valor selecionado antes de atribuir.
//Modelo
//Controlador
//Visão
fonte
Se você sabe o que estará na visualização, também pode definir o valor padrão no Controlador, em vez de configurá-lo no arquivo view / cshtml. Não há necessidade de definir o valor padrão do lado HTML.
No arquivo do controlador.
No arquivo .cshtml.
fonte
Você deveria esquecer a aula
Use isso em seu controlador:
Selecione o valor:
Adicione a lista ao ViewData:
Use isto em sua visão:
-
Mais informações em: http://www.asp.net/mvc/overview/older-versions/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc
fonte
Adicionar a seção do controlador
Adicione a seção Html
Um método simples
fonte
Para mim solução geral :)
fonte
Linq para lista suspensa com item vazio, item selecionado (funciona 100%)
(fortemente tipado, probabilidade de erro mínimo) Quaisquer alterações de modelo serão refletidas na ligação
Controlador
Visão
Este método de ligação de dados também é possível
fonte
Eu sei que isso não é realmente uma resposta para a pergunta, mas eu estava procurando uma maneira de inicializar o DropDownList a partir de uma lista no modo de exibição quando me deparei com este post.
Meu erro foi tentar criar uma SelectList a partir de um dicionário assim:
Então, fui vasculhar o documento oficial do msdn e descobri que
DropDownListFor
não necessariamente requer umSelectList
, mas sim umIEnumerable<SelectListItem>
:No meu caso, provavelmente também posso omitir o
Model.Locality
item como selecionado, visto que é a) o único item eb) já o diz naSelectListItem.Selected
propriedade.Caso você esteja se perguntando, a fonte de dados é uma página AJAX, que é carregada dinamicamente usando o controle SelectWoo / Select2.
fonte
Você precisa obter um e definir um diferente. O valor selecionado não pode ser o mesmo item que você está prestes a definir.
Eu uso o dicionário Enum para minha lista, é por isso que existe o par "chave", "valor".
fonte
Eu tive um problema semelhante, estava usando o nome ViewBag e o elemento iguais. (Erro de digitação)
fonte
Este é um problema de CSS. Não sei por que @ Html.DropDownListFor no Bootstrap 4 funciona. Certamente este é um problema de design de classe. De qualquer forma, o trabalho é, se sua caixa de entrada suspensa tiver preenchimento CSS: #px, # px; elemento em seguida, desative-o. Espero que isso funcione.
fonte