Estou tendo problemas com DropDownListFor
meu aplicativo MVC3. Consegui usar StackOverflow para descobrir como fazer com que eles apareçam no View, mas agora não sei como capturar os valores em suas propriedades correspondentes no View Model quando ele é enviado. Para fazer isso funcionar, tive que criar uma classe interna que tinha um ID e uma propriedade de valor, então tive que usar um IEnumerable<Contrib>
para satisfazer os DropDownListFor
requisitos de parâmetro. Agora, entretanto, como MVC FW deve mapear o valor que é selecionado neste menu suspenso de volta para a propriedade de string simples em meu modelo de visualização?
public class MyViewModelClass
{
public class Contrib
{
public int ContribId { get; set; }
public string Value { get; set; }
}
public IEnumerable<Contrib> ContribTypeOptions =
new List<Contrib>
{
new Contrib {ContribId = 0, Value = "Payroll Deduction"},
new Contrib {ContribId = 1, Value = "Bill Me"}
};
[DisplayName("Contribution Type")]
public string ContribType { get; set; }
}
Na minha Visualização, coloco o menu suspenso na página assim:
<div class="editor-label">
@Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId,
new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>
Quando eu envio o formulário, ContribType
é (claro) nulo.
Qual é a maneira correta de fazer isso?
fonte
contribTypeOptions
, por exemplo,new Contrib {ContribId = -1, Value = "Please Select"}
e ele será mostrado na lista suspensa. Do que você pode verificar seContribType
é-1
este é o meio que o usuário não selecionou nenhum valor@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
SelectList
) . É o valor da propriedade (ContribType
) que determina o que é selecionado (é assim que a vinculação de modelo funciona) e o código deve ser apenas@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")
Você pode editar a resposta para corrigir.Acho que isso vai ajudar: No Controlador, pegue os itens da lista e o valor selecionado
e em vista
fonte
Para vincular dados dinâmicos em um DropDownList, você pode fazer o seguinte:
Crie ViewBag no controlador como abaixo
agora use este valor na visualização como abaixo:
fonte
Aqui, o valor é aquele objeto do modelo onde você deseja salvar o seu valor selecionado
fonte