我需要一个Create
视图来捕获ClubViewModel
及其发生时间表的信息。我以前通过flatpacking到一个类来实现这个,但是遇到了AutoMapper的问题,因为我的扁平包单个类与我的Repository两个类不匹配。这是我之前创建视图的结构:
public class ClubViewModel
{
public int ClubId { get; set; }
public bool IsMonday { get; set; }
public bool IsTuesday { get; set; }
public bool IsWednesday { get; set; }
public bool IsThursday { get; set; }
public bool IsFriday { get; set; }
[DataType(DataType.Time)]
public DateTime? MondayFrom { get; set; }
[DataType(DataType.Time)]
public DateTime? MondayTo { get; set; }
[DataType(DataType.Time)]
public DateTime? TuesdayFrom { get; set; }
[DataType(DataType.Time)]
public DateTime? TuesdayTo { get; set; }
[DataType(DataType.Time)]
public DateTime? WednesdayFrom { get; set; }
[DataType(DataType.Time)]
public DateTime? WednesdayTo { get; set; }
[DataType(DataType.Time)]
public DateTime? ThursdayFrom { get; set; }
[DataType(DataType.Time)]
public DateTime? ThursdayTo { get; set; }
[DataType(DataType.Time)]
public DateTime? FridayFrom { get; set; }
[DataType(DataType.Time)]
public DateTime? FridayTo { get; set; }
public string AdditionalInfo { get; set; }
}
我被告知我应该尝试让ViewModel与我的Repository Models更紧密地同步,以便稍后帮助进行映射。
基于此,这些是我想要创建新Create
视图的两个ViewModel:
public class ClubViewModel
{
public int ClubId { get; set; }
public IList<CalendarEntryViewModel> MeetingDays { get; set; }
public string AdditionalInfo { get; set; }
}
public class CalendarEntryViewModel
{
public bool IsMonday { get; set; }
public bool IsTuesday { get; set; }
public bool IsWednesday { get; set; }
public bool IsThursday { get; set; }
public bool IsFriday { get; set; }
[DataType(DataType.Time)]
public DateTime? From { get; set; }
[DataType(DataType.Time)]
public DateTime? To { get; set; }
}
我不明白的是,如果我为ClubViewModel
添加一个视图,它自然会排除List信息,我假设这需要在创建视图中进入局部视图,不过,我不明白我将如何迎合每一种可能的情况,就像我在平面包装版本中所做的那样,我能够很好地呈现:
答案 0 :(得分:3)
Oldy但是一个好东西... http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
你不应该在MeetDay模型上需要你所有的一天旗帜(IsMonday,IsTuesday等),你可以假设它基于它在列表中的位置。填充列表以传递到视图时,您将根据需要创建多天 - 如果要显示整周,则为7天,如果仅显示工作周,则为5天。
只要您将视图传递给您希望它返回的视图模型,.NET就应该处理绑定魔术。
您的观点与以下内容类似:
@model ClubViewModel
@for (int meetingDay = 0; meetingDay < Model.MeetingDays.Count; meetingDay++)
{
@* Get the current day of week *@
var dayOfWeek = Enum.GetName(typeof (DayOfWeek), meetingDay);
<label>@dayOfWeek Start</label>
@Html.TextBoxFor(m => Model.MeetingDays[meetingDay].From)
<label>@dayOfWeek Finish</label>
@Html.TextBoxFor(m => Model.MeetingDays[meetingDay].To)
}
您的控制器可能看起来像:
[HttpPost]
public ActionResult Index(ClubViewModel viewModel)
{
var monday = viewModel.MeetingDays[(int)DayOfWeek.Monday];
var tuesday = viewModel.MeetingDays[(int)DayOfWeek.Tuesday];
// etc etc
return View();
}
Haven未对此进行测试,但希望它能为您指明正确的方向。