J'ai des problèmes avec DropDownListFor
mon application MVC3. J'ai pu utiliser StackOverflow pour comprendre comment les faire apparaître sur la vue, mais maintenant je ne sais pas comment capturer les valeurs dans ses propriétés correspondantes sur le modèle de vue lorsqu'il est soumis. Pour que cela fonctionne, je devais créer une classe interne qui avait un ID et une propriété de valeur, puis je devais utiliser un IEnumerable<Contrib>
pour satisfaire les DropDownListFor
exigences des paramètres. Maintenant, cependant, comment MVC FW est-il censé mapper la valeur sélectionnée dans cette liste déroulante dans la propriété de chaîne simple sur mon modèle de vue?
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; }
}
Dans ma vue, je place le menu déroulant sur la page comme ceci:
<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>
Lorsque je soumets le formulaire, le formulaire ContribType
est (bien sûr) nul.
Quelle est la bonne façon de procéder?
la source
contribTypeOptions
, par exemplenew Contrib {ContribId = -1, Value = "Please Select"}
et il sera affiché dans la liste déroulante. Que vous pouvez vérifier siContribType
est-1
c'est signifie que l' utilisateur n'a pas sélectionné de valeur@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
SelectList
) . C'est la valeur de la propriété (ContribType
) qui détermine ce qui est sélectionné (c'est ainsi que fonctionne la liaison de modèle) et le code devrait simplement être@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")
Pouvez-vous s'il vous plaît éditer la réponse pour corriger.Je pense que cela aidera: dans Controller, obtenez les éléments de la liste et la valeur sélectionnée
et en vue
la source
Pour lier des données dynamiques dans une DropDownList, vous pouvez effectuer les opérations suivantes:
Créez ViewBag dans Controller comme ci-dessous
utilisez maintenant cette valeur dans la vue comme ci-dessous:
la source
Ici, la valeur est cet objet du modèle où vous souhaitez enregistrer votre valeur sélectionnée
la source