几个月前刚开始使用C#时,我发现很难用这种语言来表达,现在我正在使用MVC模型,剃刀页面和实体框架在ASP.NET中创建一个网站,同时还在其中使用存储过程和视图我的数据库。所有全新的要素,并且对于专业人士而言,在网上提供的帮助相对较少,必须将不同的答案拼凑在一起。到目前为止,一切正常,但是我目前需要基于sql视图创建现有ViewModel的IEnumerable版本。
原因很简单,可能存在另一个解决方案,我有以下ViewModel:
public class TimeRegistrationViewModel
{
public int PK_Id { get; set; }
[Required]
public int FK_UserId { get; set; }
[Required]
public int FK_ProjectId { get; set; }
[Required]
public int FK_TaskId { get; set; }
[Required]
public int Time { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public System.DateTime Date { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public System.DateTime DateEntry { get; set; }
public string TaskTypeName { get; set; }
public string ProjectName { get; set; }
public string UserName { get; set; }
public List<TimeReg.VI_TimeRegistration> VI_TimeRegistration_List { get; set; }
public TimeRegistrationViewModel() { }
//Overload created for shorter controller code when assigned the values of View to a ViewModel
public TimeRegistrationViewModel(VI_TimeRegistration viTimeRegistration)
{
PK_Id = viTimeRegistration.PK_Id;
FK_UserId = viTimeRegistration.FK_UserId;
FK_ProjectId = viTimeRegistration.FK_ProjectId;
FK_TaskId = viTimeRegistration.FK_TaskId;
Time = viTimeRegistration.Time;
Date = viTimeRegistration.Date;
DateEntry = viTimeRegistration.DateEntry;
TaskTypeName = viTimeRegistration.TaskTypeName;
ProjectName = viTimeRegistration.ProjectName;
UserName = viTimeRegistration.UserName;
}
public TimeRegistrationViewModel(List<TimeReg.VI_TimeRegistration> list)
{
VI_TimeRegistration_List = list;
}
}
}
如您所见,它使用以下数据验证方法:
DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
为了仅在索引页面上显示DATE而不是DATE:00:00:00
现在这在详细信息页面下有效,但是我制作索引控制器的方式如下:
public ActionResult Index()
{
var timeRegistrationViewModel = new TimeRegistrationViewModel(db.VI_TimeRegistration.ToList());
return View(timeRegistrationViewModel);
}
因此,这当然不使用索引页上的数据验证。
我想做的本质上是
public ActionResult Index()
{
IEnumerable<TimeRegistrationViewModel> timeRegistrationViewModel = new TimeRegistrationViewModel(db.VI_TimeRegistration);
return View(timeRegistrationViewModel);
}
由于类的不同,这显然不起作用,但是我不太确定如何实现所需的结果。我已经研究过AutoMapper,但我不太了解。
我已经研究了一个foreach循环,但是由于我对IEnumeralbe的基本了解,我不确定如何处理此问题,因为我无法创建TimeRegistrationViewModel的抽象IList或IEnumerable:
如上所述,我不确定是否可以在其他地方应用数据验证。最简单的位置在VI_TimeRegistration实体上,但是它位于Entity Frame内,因此将被覆盖。