Мне сложно сформулировать этот вид, поскольку я только начал C # несколько месяцев назад, и сейчас я создаю веб-сайт в ASP.NET, используя модель MVC и бритвенные страницы и Entity Framework, а также использую хранимые процедуры и представления вмоя база данныхВсе совершенно новые элементы и относительно небольшая помощь онлайн для тех, кому приходится собирать разные ответы.До сих пор это работало нормально, но в настоящее время мне нужно создать IEnumerable версию существующей ViewModel на основе sql View.
Причина довольно проста, и может существовать другое решение. Я получил следующее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)]
Для отображения только ДАТЫ на странице индексавместо ДАТА: 00: 00: 00
Теперь это работает на странице сведений, однако способ, которым я сделал свой контроллер для индекса, выглядит так:
public ActionResult Index()
{
var timeRegistrationViewModel = new TimeRegistrationViewModel(db.VI_TimeRegistration.ToList());
return View(timeRegistrationViewModel);
}
Так что это конечно нене использую davalidation на странице индекса.
По сути, я хочу сделать следующее:
public ActionResult Index()
{
IEnumerable<TimeRegistrationViewModel> timeRegistrationViewModel = new TimeRegistrationViewModel(db.VI_TimeRegistration);
return View(timeRegistrationViewModel);
}
Что, очевидно, не работает из-за разных классов, но я 'Я не совсем уверен, как добиться желаемого результата.Я посмотрел в AutoMapper, но я не совсем понимаю.
Я изучил цикл foreach, но с моим минимальным опытом работы с IEnumeralbe я не уверен, как к этому подойти, так как я не могу создать абстрактный IList или IEnumerable моей TimeRegistrationViewModel:
И, как уже упоминалось, я не уверен, смогу ли я применить проверку данных в другом месте.Самое простое место было бы в сущности VI_TimeRegistration, но это внутри Entity Frame и поэтому переопределяется.