public async Task <IActionResult> Create(AdminQuestionViewModel model)
        {
            if (ModelState.IsValid)
            {
                var question = new Question();

                question.Title     = model.Title;
                question.Content   = model.Content;
                question.IsVisible = model.IsVisible;

                question.Author = await _userManager.GetUserAsync(User);

                question.PublicationDate = DateTime.Now;
                question.Tags            = new List <QuestionTag>();


                // Add tags
                if (!string.IsNullOrEmpty(model.Tags))
                {
                    var tags = model.Tags.Split(',', StringSplitOptions.RemoveEmptyEntries);

                    if (tags.Any())
                    {
                        foreach (var tag in tags)
                        {
                            var dbTag = _context.Tags.FirstOrDefault(t => t.Name.ToLower() == tag.ToLower());
                            if (dbTag == null)
                            {
                                // Tag does not exist, create it
                                dbTag      = new Tag();
                                dbTag.Name = tag;
                                _context.Tags.Add(dbTag);
                            }

                            var questionTag = new QuestionTag();
                            questionTag.Question = question;
                            questionTag.Tag      = dbTag;

                            question.Tags.Add(questionTag);
                        }
                    }
                }

                _context.Add(question);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(model));
        }
        // GET: Admin/Questions/Edit/5
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var question = await _context.Questions.FindAsync(id);

            if (question == null)
            {
                return(NotFound());
            }

            var model = new AdminQuestionViewModel();

            model.Id        = question.Id;
            model.Title     = question.Title;
            model.Content   = question.Content;
            model.IsVisible = question.IsVisible;
            model.Tags      = question.GetTagsAsString();

            return(View(model));
        }
        public async Task <IActionResult> Edit(int id, AdminQuestionViewModel model)
        {
            if (id != model.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var DBQuestion = await _context.Questions.FindAsync(id);

                    DBQuestion.Title     = model.Title;
                    DBQuestion.Content   = model.Content;
                    DBQuestion.IsVisible = model.IsVisible;


                    // Add tags
                    DBQuestion.Tags.Clear();

                    if (!string.IsNullOrEmpty(model.Tags))
                    {
                        var tags = model.Tags.Split(',', StringSplitOptions.RemoveEmptyEntries);

                        if (tags.Any())
                        {
                            foreach (var tag in tags)
                            {
                                var dbTag = _context.Tags.FirstOrDefault(t => t.Name.ToLower() == tag.ToLower());
                                if (dbTag == null)
                                {
                                    // Tag does not exist, create it
                                    dbTag      = new Tag();
                                    dbTag.Name = tag;
                                    _context.Tags.Add(dbTag);
                                }

                                var questionTag = new QuestionTag();
                                questionTag.Question = DBQuestion;
                                questionTag.Tag      = dbTag;

                                DBQuestion.Tags.Add(questionTag);
                            }
                        }
                    }

                    _context.Update(DBQuestion);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!QuestionExists(model.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(model));
        }