public ActionResult Vote(FormCollection formCollection)
        {
            string errorMessage = "";

            try
            {
                var elections  = _electionManager.RetrieveElectionsByActive(true);
                var delegateID = formCollection[1].ToString();
                if (formCollection.Count != elections.Count + 2)
                {
                    errorMessage = "Please vote for all elections";
                    return(RedirectToAction("Vote", new { delegateID = delegateID, errorMessage = errorMessage }));
                }
                else
                {
                    var oldDelegate = _delegateManager.RetrieveDelegateByID(Int32.Parse(delegateID));

                    var newDelegate = new ElectionDelegate
                    {
                        DelegateID           = oldDelegate.DelegateID,
                        Active               = oldDelegate.Active,
                        FirstName            = oldDelegate.FirstName,
                        LastName             = oldDelegate.LastName,
                        Pin                  = oldDelegate.Pin,
                        HasVotedForGrants    = oldDelegate.HasVotedForGrants,
                        HasVotedForElections = true // mark that this delegate has voted for elections
                    };

                    // gives a vote to the designated candidate
                    for (int i = 2; i < formCollection.Count; i++)
                    {
                        var candidate = _candidateManager.RetrieveCandidateByCandidateID(Int32.Parse(formCollection[i]));
                        candidate.Votes += 1;
                        _candidateManager.EditCandidateVotes(candidate);
                    }

                    _delegateManager.EditDelegate(oldDelegate, newDelegate);
                    return(RedirectToAction("VotingConfirmation"));
                }
            }
            catch (Exception)
            {
                return(View());
            }
        }