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