示例#1
0
        public async Task <ActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }

            var survey = await _db.Survey.Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id);


            if (survey == null)
            {
                return(HttpNotFound());
            }

            var user = await _db.User.FirstOrDefaultAsync(m => m.Email == User.Identity.Name);

            var viewModel = new SurveyAndAnswerListViewModel()
            {
                Survey     = survey,
                AnswerList = await _db.Answer.Where(a => a.UserId == user.Id).Join(_db.Question.Where(q => q.SurveyId == survey.Id), a => a.QuestionId, q => q.Id, (a, q) => a).ToListAsync()
            };

            return(View(viewModel));
        }
示例#2
0
        public async Task <ActionResult> Answer(int?id, SurveyAndAnswerListViewModel viewModel)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }

            // Retrieve survey with questions
            var survey = await _db.Survey.Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id);


            if (survey == null)
            {
                return(HttpNotFound());
            }

            // View Model validation
            if (!ModelState.IsValid)
            {
                // Set survey on viewModel
                viewModel.Survey = survey;

                return(View("Answering", viewModel));
            }

            // Retrieve user from coockie
            var user = await _db.User.SingleOrDefaultAsync(m => m.Email == User.Identity.Name);

            // Redirect to login if user does not exist
            if (user == null)
            {
                return(RedirectToAction("Login", "Authentication", new { area = "Respondent" }));
            }

            // Redirect to Index if there are not answers
            if (viewModel.AnswerList == null)
            {
                return(RedirectToAction("Index"));
            }

            // Save answers to database
            foreach (var answer in viewModel.AnswerList)
            {
                answer.UserId = user.Id;
                _db.Answer.Add(answer);
            }

            TempData["StatusMessage"] = "Survey answered.";

            await _db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
示例#3
0
        public async Task <ActionResult> Details(int id, int?userId)
        {
            var survey = await _db.Survey
                         .Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id);

            if (survey == null)
            {
                return(HttpNotFound());
            }

            if (userId != null)
            {
                // retrieve questions and answer for the survey
                SurveyAndAnswerListViewModel surveyAndAnswerListViewModel = new SurveyAndAnswerListViewModel()
                {
                    Survey     = survey,
                    AnswerList = await _db.Answer.Where(answer => answer.UserId == userId)
                                 .Join(_db.Question.Where(m => m.SurveyId == id), a => a.QuestionId, q => q.Id, (a, q) => a)
                                 .ToListAsync()
                                 //AnswerList = await _db.Answer.Where(a=>a.Question.SurveyId==id && a.UserId==userId).Select(a=>a).ToListAsync()
                };


                return(View("DetailsByUser", surveyAndAnswerListViewModel));
            }
            else
            {
                // Retrive the users that has answered the survey
                var users = await
                            _db.Survey.Where(m => m.Id == id)
                            .Join(_db.Question, s => s.Id, q => q.SurveyId, (s, q) => new { QuestionId = q.Id })
                            .Join(_db.Answer, q => q.QuestionId, a => a.QuestionId, (q, a) => new { a.UserId })
                            .GroupBy(a => a.UserId)
                            .Join(_db.User, a => a.Key, u => u.Id, (a, u) => u)
                            .ToListAsync();

                return(View(users));
            }
        }
示例#4
0
        // GET - Answeing
        public async Task <ActionResult> Answering(int?id)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }

            // Retrieve survey by id and include its questions
            var survey = await _db.Survey.Include(m => m.Questions).SingleOrDefaultAsync(m => m.Id == id);

            if (survey == null)
            {
                return(HttpNotFound());
            }

            // Create viewModel
            var viewModel = new SurveyAndAnswerListViewModel()
            {
                Survey = survey,
            };

            return(View(viewModel));
        }