public ActionResult Create()
 {
     var pollDetailsViewModel = new PollDetailsViewModel
     {
         StartDate = new DateTimeEditor
         {
             ShowDate = true,
             ShowTime = false
         },
         EndDate = new DateTimeEditor
         {
             ShowDate = true,
             ShowTime = false
         }
     };
     pollDetailsViewModel.Answers.Add(new PollAnswerViewModel());
     return View(pollDetailsViewModel);
 }
 public ActionResult Edit(int id)
 {
     PollRecord poll = _pollService.Get(id);
     var pollDetailsViewModel = new PollDetailsViewModel
     {
         Id = poll.Id,
         MaxAnswers = poll.MaxAnswers,
         PollState = poll.PollState,
         Question = poll.Question,
         StartDate = new DateTimeEditor
         {
             Date = _dateLocalizationServices.ConvertToLocalizedDateString(poll.StartDate),
             ShowDate = true,
             ShowTime = false
         },
         EndDate = new DateTimeEditor
         {
             Date = _dateLocalizationServices.ConvertToLocalizedDateString(poll.EndDate),
             ShowDate = true,
             ShowTime = false
         }
     };
     foreach (var answer in poll.Answers)
     {
         var answerModel = new PollAnswerViewModel
         {
             Id = answer.Id,
             Answer = answer.Answer,
             Votes = answer.Votes
         };
         pollDetailsViewModel.Answers.Add(answerModel);
     }
     return View(pollDetailsViewModel);
 }
        private bool ProcessPollPersistence(PollDetailsViewModel poll)
        {
            if (ModelState.IsValid)
            {
                var pollRecord = _pollService.Get(poll.Id) ?? new PollRecord();
                pollRecord.MaxAnswers = poll.MaxAnswers;
                pollRecord.PollState = poll.PollState;
                pollRecord.Question = poll.Question;
                if (String.IsNullOrWhiteSpace(poll.StartDate.Date))
                {
                    pollRecord.StartDate = null;
                }
                else
                {
                    poll.StartDate.Time = "00:00:00";
                    try
                    {
                        pollRecord.StartDate = _dateLocalizationServices.ConvertFromLocalizedString(poll.StartDate.Date + " " + poll.StartDate.Time);
                    }
                    catch (FormatException)
                    {
                        ModelState.AddModelError("InvalidStart", "Invalid start date");
                        return false;
                    }
                }

                if (String.IsNullOrWhiteSpace(poll.EndDate.Date))
                {
                    pollRecord.EndDate = null;
                }
                else
                {
                    poll.EndDate.Time = "23:59:59";
                    try
                    {
                        pollRecord.EndDate = _dateLocalizationServices.ConvertFromLocalizedString(poll.EndDate.Date + " " + poll.EndDate.Time);
                    }
                    catch (FormatException)
                    {
                        ModelState.AddModelError("InvalidStart", "Invalid end date");

                        return false;
                    }
                }

                var idsToDlete = pollRecord.Answers.Select(a => a.Id).Except(poll.Answers.Select(a => a.Id)).ToList();
                foreach (var i in idsToDlete)
                {
                    var answ = pollRecord.Answers.First(a => a.Id == i);
                    pollRecord.Answers.Remove(answ);
                }

                foreach (var answer in poll.Answers)
                {
                    var existentAnswer = pollRecord.Answers.Where(a => a.Id > 0).FirstOrDefault(a => a.Id == answer.Id);
                    if (existentAnswer == null) //add new
                    {
                        var pollAnswer = new PollAnswerRecord
                        {
                            Id = answer.Id,
                            Answer = answer.Answer,
                            Votes = answer.Votes
                        };
                        pollRecord.Answers.Add(pollAnswer);
                    }
                    else
                    { //update
                        existentAnswer.Answer = answer.Answer;
                        existentAnswer.Votes = answer.Votes;
                    }
                }
                _pollService.SaveOrUpdate(pollRecord);
            }
            return ModelState.IsValid;
        }
        public ActionResult Create(PollDetailsViewModel poll)
        {
            if (ProcessPollPersistence(poll))
            {
                return RedirectToAction("Index");
            }
            poll.StartDate.ShowDate = true;
            poll.StartDate.ShowTime = false;
            poll.EndDate.ShowDate = true;
            poll.EndDate.ShowTime = false;

            return View(poll);
        }