3
다른보기 모델의 목록 인 속성을 포함하는보기에 부모 뷰 모델이 바인딩되어 있습니다.ASP.Net MVC 3 DropDownListFor에 대해 선택된 값이 설정되지 않음
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 }));
}
그리고 UserPreferences에 바인드 뷰의 코드 :
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입니다 : 여기
는 상위 뷰 모델 코드 :<div id="time-availability-div">
@for (int index = 0; index < Model.TimeAvailability.Count; index++)
{
<table>
<thead>
<tr>
<td>
@Html.LabelFor(m => m.TimeAvailability[index].SelectedDay)
</td>
<td>
@Html.LabelFor(m => m.TimeAvailability[index].SelectedStartTime)
</td>
<td>
@Html.LabelFor(m => m.TimeAvailability[index].SelectedEndTime)
</td>
</tr>
</thead>
<tbody>
<tr>
<td>
@Html.DropDownListFor(m => m.TimeAvailability[index].SelectedDay, Model.Days)
</td>
<td>
@Html.DropDownListFor(m => m.TimeAvailability[index].SelectedStartTime, Model.Hours)
</td>
<td>
@Html.DropDownListFor(m => m.TimeAvailability[index].SelectedEndTime, Model.Hours)
</td>
</tr>
</tbody>
</table>
}
</div>
한 가지주의 할 점은 DropDownListFor에서 선택한 값을 명시 적으로 설정하면 올바르게 작동한다는 것입니다. 선택한 값이 인덱스의 속성을 자동으로 참조하는 이유가 궁금합니다.