public ActionResult Edit(int id, string shortName, Question question)
        {
            ViewBag.Edit = true;

            // Get original question in former state from the database.
            var dbQuestion = Current.DB.Questions.Get(id);

            if (this.ModelState.IsValid)
            {
                // A password is being assigned.
                if (question.Password.HasValue())
                {
                    // If passwords don't match.
                    if (question.PasswordConfirm != question.Password)
                    {
                        this.ModelState.AddModelError("Password", "Passwords do not match.");

                        return(View("Article", question));
                    }

                    else
                    {
                        question.Password = Encryption.ComputerHash(question.Password, new SHA256CryptoServiceProvider(), Encoding.UTF8.GetBytes(CANNED_SALT));
                    }
                }

                else
                {
                    question.Password = dbQuestion.Password;
                }

                // Remove password if the checkbox has been ticked.
                if (question.RemovePassword)
                {
                    question.Password = null;
                }

                question.ShortName = URLHelpers.ToURLFragment(question.Title, 100);

                // Update
                Current.DB.Questions.Update(id, new { question.Title, question.Answer, question.ShortName, question.Password });

                return(RedirectToAction("view", new { id = id, shortName = question.ShortName }));
            }

            else
            {
                return(View("Article"));
            }
        }
        public ActionResult Add(Question question)
        {
            ViewBag.Edit = false;

            if (this.ModelState.IsValid)
            {
                // A password is being assigned.
                if (question.Password.HasValue())
                {
                    // If passwords don't match.
                    if (question.PasswordConfirm != question.Password)
                    {
                        this.ModelState.AddModelError("Password", "Passwords do not match.");

                        return(View("Article", question));
                    }

                    else
                    {
                        question.Password = Encryption.ComputerHash(question.Password, new SHA256CryptoServiceProvider(), Encoding.UTF8.GetBytes(CANNED_SALT));
                    }
                }

                question.ShortName   = URLHelpers.ToURLFragment(question.Title, 100);
                question.OwnerUserID = this.CurrentUser.ID;

                // Insert question into database.
                var id = Current.DB.Questions.Insert(new { question.Title, question.Answer, question.OwnerUserID, question.ShortName, question.Password });

                // Increment question count for the current user.
                this.CurrentUser.Questions = this.CurrentUser.Questions + 1;

                Current.DB.Users.Update(this.CurrentUser.ID, new { this.CurrentUser.Questions });

                return(RedirectToAction("view", new { id = id, shortName = question.ShortName }));
            }

            else
            {
                return(View("Article", question));
            }
        }