3

У меня есть модель родительского представления, связанная с представлением, которое содержит свойство, которое представляет собой список других моделей представлений.Выбранное значение не задано для ASP.Net MVC 3 DropDownListFor

Вот код родительского вид модели:

var timeAvailability = (from u in _entities.UserTimeAvailabilities 
            where u.UserId == userId 
            select u).ToList(); 
      for(int index = 0; index < timeAvailability.Count; index++) 
      { 
       var availableTime = timeAvailability[index]; 
       TimeAvailability.Add(new AvailableTimeSlotViewModel(index) 
             { 
              SelectedDay = availableTime.DayId, 
              SelectedStartTime = availableTime.StartHourId.HasValue ? availableTime.StartHourId.Value : 0, 
              SelectedEndTime = availableTime.EndHourId.HasValue ? availableTime.EndHourId.Value : 0 
             }); 
      } 

TimeAvailability является Список

Здесь AvailableTimeSlotViewModel:

public List<SelectListItem> Days { get; set; } 
    public int Index { get; set; } 
    public List<SelectListItem> Hours { get; set; } 
    [Display(Name = "Select Day")] 
    public int SelectedDay { get; set; } 
    [Display(Name="Start Time")] 
    public int SelectedStartTime { get; set; } 
    [Display(Name = "End Time")] 
    public int SelectedEndTime { get; set; } 

    public AvailableTimeSlotViewModel(int index) 
    { 
     Index = index; 
     _entities = Repository.GetRepository(); 
     Days = new List<SelectListItem>(); 
     _entities.Days.ToList().ForEach(d => Days.Add(new SelectListItem { Value = d.DayId.ToString(), Text = d.Name })); 
     Hours = new List<SelectListItem>(); 
     _entities.Hours.ToList().ForEach(h => Hours.Add(new SelectListItem { Value = h.HourId.ToString(), Text = h.Name })); 
    } 

И код в представлении, который связан с НайтиСтраницу:

Следует отметить, что если я явно задал выбранное значение в DropDownListFor, он отлично работает. Мне интересно, почему выбранное значение не связано автоматически, ссылаясь на свойство в индексе.

ответ

1

Мне интересно, почему выбранное значение не связано автоматически, ссылаясь на свойство по индексу.

Потому что вы использовали сложное выражение лямбда коллекции в качестве первого аргумента: m => m.TimeAvailability[index].SelectedEndTime. К сожалению, вспомогательный помощник DropDownListFor не поддерживает автоматическую настройку значения по умолчанию для таких сложных выражений, и вам необходимо установить выбранное значение:

@Html.DropDownListFor(
    m => m.TimeAvailability[index].SelectedEndTime, 
    new SelectList(Model.Hours, "Value", "Text", Model.TimeAvailability[index].SelectedEndTime) 
) 
Смежные вопросы