Domanda

ho creato il mio modello personalizzato legante per gestire una sezione DropDownList definito a mio avviso come:

Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections, "SectionID", "SectionName"), "-- Please Select --")

E qui è il mio modello di legante:

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); 
    } 
}

Ora nel mio controller di quello che posso dire:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    var category = new Category();

    if (!TryUpdateModel(category, "Category")
        return View(new CategoryForm(category, _sectionRepository().GetAll()));

    ...
}

bene questo Convalida e il valore corretto per la sezione viene assegnato quando il modello viene aggiornato, tuttavia non selezionare il valore corretto se un'altra proprietà non lo fa validate.

sarei grato se qualcuno potesse mostrare come fare questo. Grazie

È stato utile?

Soluzione

Problema risolto dicendo:

Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections.Select(s => new { Text = s.SectionName, Value = s.SectionID.ToString() }), "Value", "Text"), "-- Please Select --") 

Il problema sembra ruotare intorno alla sezione viene un numero intero. Quando si converte in una stringa tutto funziona bene. Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top