53 messaggi dal 05 febbraio 2009
Ciao a tutti,
dal titolo è già chiaro il nocciolo della questione: in un'applicazione ASP.NET MVC 5 ho una pagina di creazione in cui non riesco a recuperare il valore che l'utente ha selezionato all'interno di un campo selezione.

Di seguito il codice:

ViewModel
public class CreateMesocycleViewModel
{
    public int Id { get; set; }

    public string AthleteId { get; set; }

    public int MacrocycleId { get; set; }

    public string WorkoutMethodId { get; set; }

    [LocalizedRequired]
    [LocalizedDisplay("WorkoutMethod")]
    public IEnumerable<SelectListItem> WorkoutMethodList { get; set; }

    [LocalizedRequired]
    [LocalizedDisplay("StartDate")]
    [LocalizedDateType]
    [UIHint("Date")]
    public DateTime StartDate { get; set; }

    [LocalizedDisplay("EndDate")]
    [LocalizedDateType]
    [UIHint("Date")]
    public DateTime? EndDate { get; set; }

    [LocalizedRequired]
    [LocalizedDisplay("MicrocyclesLenght")]
    public int MicrocyclesLenght { get; set; }

    public string WorkoutsPartitionSchemaLenght { get; set; }

    [LocalizedRequired]
    [LocalizedDisplay("WorkoutsPartition")]
    public IEnumerable<SelectListItem> WorkoutsPartitionSchemas { get; set; }
}

Controller

public ActionResult Create(string athleteId, int macrocycleId)
{
    CreateMesocycleViewModel viewModel = new CreateMesocycleViewModel();
    viewModel.AthleteId = athleteId;
    viewModel.MacrocycleId = macrocycleId;
    viewModel.WorkoutMethodList = GetWorkoutMethods(athleteId);
    viewModel.StartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
    viewModel.MicrocyclesLenght = 3;
    viewModel.WorkoutsPartitionSchemas = GetWorkoutsPartitionSchemas();
    
    if (Request.IsAjaxRequest())
    {
        return PartialView(viewModel);
    }

    return View(viewModel);
}

private IEnumerable<SelectListItem> GetWorkoutMethods(string athleteId)
{
    IEnumerable<GlobalizedWorkoutMethod> workoutMethods = _workoutService.GetMethodsByAthlete(athleteId);
    return new SelectList(workoutMethods.OrderBy(x => x.Name), "Id", "Name");
}

View (solo le righe di codice esplicative)

@model Vibstudio.Workouts.Web.UI.Models.Mesocycles.CreateMesocycleViewModel

@using (Html.BeginForm("Create", "Mesocycles", FormMethod.Post))
{
    @Html.DropDownListFor(x => x.WorkoutMethodId, Model.WorkoutMethodList, new { @class = "form-control" })

    @Html.DropDownListFor(x => x.WorkoutsPartitionSchemaLenght, Model.WorkoutsPartitionSchemas, new { @class = "form-control" })

    <input type="submit" value="@Resources.Save" class="btn btn-primary"/>
}

E fin qui nessun problema...

Vorrei adesso semplicemente vedermi ritornato all'interno della action delegata al Post le proprietà di selezione "WorkoutMethodId" e "WorkoutsPartitionSchemaLenght"

[HttpPost]
public ActionResult Create(CreateMesocycleViewModel model)
{
    // model.WorkoutMethodId ---> E' NULL!!!
    // model.WorkoutsPartitionSchemaLenght ---> E' NULL!!!
            
    Mesocycle mesocycle = Mapper.Map<CreateMesocycleViewModel, Mesocycle>(model);

    if (ModelState.IsValid)
    {
        // Code missing...
    }

    model.WorkoutMethodList = GetWorkoutMethods(model.AthleteId);
    model.WorkoutsPartitionSchemas = GetWorkoutsPartitionSchemas();

    if (Request.IsAjaxRequest())
    {
        return PartialView(model);
    }

    return View(model);
}



Anticipatamente grazie a tutti per l'aiuto

vibstudio
Ciao,
andando in debug nel metodo in http post, le altre proprietà del model sono correttamente valorizzate?
Puoi postare anche la select che viene creata in HTML?

grazie

Ormai programmano tutti... ma la professionalità appartiene a pochi
53 messaggi dal 05 febbraio 2009
Risolto!

Si incartatava il DefaultModelBinder in quanto nella view avevo inserito un campo nascosto che puntava alla medesima proprietà assegnata alla DropDownList.

Grazie ancora

vibstudio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.