public async Task <IActionResult> Create([Bind("EventId,UserId,EventCreator,EventMembers,DeclinedMembers,Subject,Description,Location,StartTime,EndTime,IsFullDay")] Event @event) { if (ModelState.IsValid) { @event.SchedulerUser = await _userManager.GetUserAsync(HttpContext.User); //This also sets the UserId for the event. var userName = @event.SchedulerUser.UserName; @event.EventCreator = userName; @event.DeclinedMembers = new List <string>(); // Initialize declinded members list. //Lowercase all members @event.EventMembers = @event.EventMembers.ConvertAll(d => d.ToLower()); //Check for event creator in member input foreach (var e in @event.EventMembers) { if (e == @event.EventCreator) { TempData["CreatorNotMember"] = "You cannot put yourself as a Member. Don't worry, you are definitly a part of the event you created."; return(View()); } } //Check for duplicate members into member input var duplicateMembers = from x in @event.EventMembers group x by x into grouped where grouped.Count() > 1 select grouped.Key; List <string> duplicateMemberList = duplicateMembers.ToList(); if (duplicateMemberList.Count >= 1) { TempData["DuplicateMember"] = "You added " + String.Join("& ", duplicateMemberList) + " twice. You cannot do that."; return(View()); } //Check if added members have accounts. Only registered users can be added as Event Members. var allUsers = _userManager.Users .AsNoTracking(); List <string> allUserNames = new List <string>(allUsers.Select(u => u.UserName)); List <string> unregisteredUser = new List <string>(@event.EventMembers.Except(allUserNames)); if (unregisteredUser.Count == 1) { TempData["UserNotRegistered"] = String.Join(",", unregisteredUser) + " is not registered with Scheduler. Please enter a valid e-mail address."; return(View()); } if (unregisteredUser.Count > 1) { TempData["MultiUsersNotRegistered"] = String.Join(", ", unregisteredUser) + " are not registered with Scheduler. Please enter a valid e-mail address."; return(View()); } _context.Add(@event); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(@event)); }