private IEnumerable <ValidationError> ValidateShow(ShowVm model, EventMetadataVm eventVm, string prefix = "") { var result = new List <ValidationError>(); var titleProperty = model.GetPropertyName(p => p.Title); if (string.IsNullOrEmpty(model.Title)) { result.Add(new ValidationError( prefix + titleProperty, T("Title can not be empty!").Text)); } else if (model.Title.Length > 255) { result.Add(new ValidationError( prefix + titleProperty, T("Title can not be larger than 255 characters!").Text)); } var pictureProperty = model.GetPropertyName(p => p.Picture); if (!string.IsNullOrEmpty(model.Picture)) { if (model.Picture.Length > 255) { result.Add(new ValidationError( prefix + pictureProperty, T("Picture url can not be larger than 255 characters!").Text)); } else if (!model.Picture.IsUrlValid()) { result.Add(new ValidationError( prefix + pictureProperty, T("Picture url is in bad format!").Text)); } } var detailsUrlProperty = model.GetPropertyName(p => p.DetailsUrl); if (!string.IsNullOrEmpty(model.DetailsUrl)) { if (model.DetailsUrl.Length > 255) { result.Add(new ValidationError( prefix + detailsUrlProperty, T("Details url can not be larger than 255 characters!").Text)); } else if (!model.DetailsUrl.IsUrlValid()) { result.Add(new ValidationError( prefix + detailsUrlProperty, T("Details url is in bad format!").Text)); } } var startTimeProperty = model.GetPropertyName(p => p.StartTime); if (model.StartTime.HasValue && model.EndTime.HasValue && model.StartTime.Value > model.EndTime.Value) { result.Add(new ValidationError( prefix + startTimeProperty, T("Show start time has to be less than or equal to the end time.").Text)); } var eventStartDate = eventVm.StartDate; var eventEndDate = eventVm.EndDate ?? eventVm.StartDate; if (model.StartTime.HasValue && eventStartDate.HasValue && (model.StartTime.Value < eventStartDate.Value.AddDays(-1) || (eventEndDate.HasValue && model.StartTime.Value > eventEndDate.Value.AddDays(1)))) { result.Add(new ValidationError( prefix + startTimeProperty, T("Show start time has to be between event start and end dates.").Text)); } var endTimeProperty = model.GetPropertyName(p => p.EndTime); if (model.EndTime.HasValue && eventStartDate.HasValue && (model.EndTime.Value < eventStartDate.Value.AddDays(-1) || (eventEndDate.HasValue && model.EndTime.Value > eventEndDate.Value.AddDays(2)))) { result.Add(new ValidationError( prefix + endTimeProperty, T("Show end time has to be between event start and end dates.").Text)); } return(result); }