Modèle personnalisé Liant pour DropDownList ne sélectionnez pas la valeur correcte
-
30-09-2019 - |
Question
J'ai créé mon propre modèle de liaison personnalisé pour gérer une section DropDownList définie à mon avis que:
Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections, "SectionID", "SectionName"), "-- Please Select --")
Et voici mon classeur modèle:
public class SectionModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (bindingContext.ModelType.IsAssignableFrom(typeof(Section)) && value != null)
{
if (Utilities.IsInteger(value.AttemptedValue))
return Section.GetById(Convert.ToInt32(value.AttemptedValue));
else if (value.AttemptedValue == "")
return null;
}
return base.BindModel(controllerContext, bindingContext);
}
}
Maintenant dans mon contrôleur je peux dire:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
var category = new Category();
if (!TryUpdateModel(category, "Category")
return View(new CategoryForm(category, _sectionRepository().GetAll()));
...
}
Cela confirme bien et la valeur correcte de la section est affectée lorsque le modèle est mis à jour, mais il ne sélectionne pas la valeur correcte si une autre propriété ne valide pas.
Je vous en serais reconnaissant si quelqu'un pouvait me montrer comment faire. Merci
La solution
Problème résolu en disant:
Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections.Select(s => new { Text = s.SectionName, Value = s.SectionID.ToString() }), "Value", "Text"), "-- Please Select --")
La question semble tourner autour de la section est d'être un entier. Lorsque vous convertissez à une chaîne tout fonctionne très bien. Espérons que cela aide.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow