public async Task <ActionResult> Respond(int id, int?pageId) { var userSection = await _surveyManager.GetCurrentUserSectionAsync(User.Identity.GetUserId(), id); var userPages = (await _surveyManager.GetUserPagesAsync(User.Identity.GetUserId(), userSection.Id.GetValueOrDefault())).ToList(); var userTest = await _testManager.GetAsync(User.Identity.GetUserId(), id); var userPage = pageId.HasValue ? userPages.Single(p => p.Page.Id == pageId.Value) : await _surveyManager.GetCurrentUserPageAsync(User.Identity.GetUserId(), id); if (userPage == null) { return(RedirectToAction("SectionReview", "Test", new { id })); } var viewModel = _mapper.Map <ResponseViewModel>(userPage); var pageIndex = userPages.FindIndex(up => up.Page.Id == userPage.Page.Id); viewModel.TestId = userTest.Id; viewModel.PriorPageId = pageIndex != 0 ? userPages[pageIndex - 1].Page.Id : (int?)null; return(View((viewModel.Page.GetType().BaseType ?? viewModel.Page.GetType()).Name, viewModel)); }