コード例 #1
0
        public async Task <IActionResult> Create(int?id)
        {
            if (id is null)
            {
                return(NotFound());
            }

            var testQuestion = await _testingPlatform.TestQuestionManager
                               .FindAsync(tq => tq.AppUserId == _userId && tq.Id == id);

            if (testQuestion is null)
            {
                return(NotFound());
            }

            if (!(testQuestion.Test.TestCode is null))
            {
                return(NotFound());
            }

            var testAnswer = new TestAnswer {
                TestQuestion = testQuestion, TestQuestionId = testQuestion.Id
            };

            return(View(testAnswer));
        }
コード例 #2
0
        public ActionResult Create(TestAnswer testAnswer)
        {
            if (ModelState.IsValid)
            {
                db.TestAnswers.Add(testAnswer);

                try
                {
                    db.SaveChanges();
                    return(RedirectToAction("Index"));
                }
                catch (Exception ex)
                {
                    if (ex.InnerException != null &&
                        ex.InnerException.InnerException != null &&
                        ex.InnerException.InnerException.Message.Contains("_Index"))
                    {
                        ModelState.AddModelError(string.Empty, "this record already exists");
                    }
                    else
                    {
                        ModelState.AddModelError(string.Empty, ex.Message);
                    }
                }
            }

            return(View(testAnswer));
        }
コード例 #3
0
        public void CreateAnswerForQuestion(string questionGuid, TestAnswer answer)
        {
            var question = _questionRepository.Get(q => q.Guid == questionGuid);

            question.TestAnswers.Add(answer);
            _questionRepository.Update(question);
        }
コード例 #4
0
 public ActionResult AddQuestion(CreateQuestionViewModel model, FormCollection form)
 {
     //return Content(Convert.ToInt32(form["selectC"]).ToString());
     if (ModelState.IsValid)
     {
         try
         {
             TestQuestion q = new TestQuestion()
             {
                 QuestionContent = model.questionArea,
                 TestTypeID      = model.TestTypeID,
                 modifyUser      = User.Identity.Name,
                 modifyDateTime  = DateTime.Now
             };
             TestAnswer a1 = new TestAnswer()
             {
                 AnswerContent  = model.answerA,
                 TestQuestion   = q,
                 AnswerProperty = (model.answerRight == 1)? true :false
             };
             TestAnswer a2 = new TestAnswer()
             {
                 AnswerContent  = model.answerB,
                 TestQuestion   = q,
                 AnswerProperty = (model.answerRight == 2) ? true : false
             };
             TestAnswer a3 = new TestAnswer()
             {
                 AnswerContent  = model.answerC,
                 TestQuestion   = q,
                 AnswerProperty = (model.answerRight == 3) ? true : false
             };
             TestAnswer a4 = new TestAnswer()
             {
                 AnswerContent  = model.answerD,
                 TestQuestion   = q,
                 AnswerProperty = (model.answerRight == 4) ? true : false
             };
             offlineDB.TestQuestion.Add(q);
             offlineDB.TestAnswer.Add(a1);
             offlineDB.TestAnswer.Add(a2);
             offlineDB.TestAnswer.Add(a3);
             offlineDB.TestAnswer.Add(a4);
             offlineDB.SaveChanges();
             return(RedirectToAction("Index"));
         }
         catch
         {
             ModelState.AddModelError("", "出现错误");
             ViewBag.Store_System = new SelectList(offlineDB.TestType, "Id", "CustomName");
             return(View(model));
         }
     }
     else
     {
         ModelState.AddModelError("", "出现错误");
         ViewBag.Store_System = new SelectList(offlineDB.TestType, "Id", "CustomName");
         return(View(model));
     }
 }
コード例 #5
0
        public JsonResult SubmitAndNext(int examId, int answerId)
        {
            var exam = offlineDB.Examination.SingleOrDefault(m => m.ID == examId);

            if (exam != null)
            {
                int currentSequence = exam.CurrentSequence ?? 0;
                if (currentSequence < exam.MaxSequence)
                {
                    ExaminationDetails details = (from m in offlineDB.ExaminationDetails
                                                  where m.ExaminationID == exam.ID && m.Sequence == currentSequence
                                                  select m).FirstOrDefault();
                    TestAnswer answer = offlineDB.TestAnswer.SingleOrDefault(m => m.ID == answerId);
                    if (answer.AnswerProperty)
                    {
                        details.Result = true;
                    }
                    else
                    {
                        details.Result = false;
                    }
                    exam.CurrentSequence = currentSequence + 1;
                    offlineDB.SaveChanges();
                    return(Json(new { result = "SUCCESS", questionresult = details.Result }, JsonRequestBehavior.AllowGet));
                }
            }
            return(Json(new { result = "FAIL" }, JsonRequestBehavior.AllowGet));
        }
コード例 #6
0
        public ActionResult DeleteConfirmed(int id)
        {
            TestAnswer testAnswer = db.TestAnswers.Find(id);

            db.TestAnswers.Remove(testAnswer);
            try
            {
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null &&
                    ex.InnerException.InnerException != null &&
                    ex.InnerException.InnerException.Message.Contains("REFERENCE"))
                {
                    ModelState.AddModelError(string.Empty, "Not allowed, there are records in the temporary tables of users with this value, please wait until there are no records there using this value and try again or contact the administrator");
                }
                else
                {
                    ModelState.AddModelError(string.Empty, ex.Message);
                }
            }

            return(View(testAnswer));
        }
コード例 #7
0
        public async Task <TestAnswerDetailsResponse> Handle(TestAnswerCreateCommand request, CancellationToken cancellationToken)
        {
            var currentUserId = identityService.GetCurrentUserId();
            var test          = await context.Tests.Include(x => x.Tasks)
                                .Include(x => x.StudentTests)
                                .ThenInclude(x => x.TestAnswer)
                                .Include(x => x.StudentTests)
                                .ThenInclude(x => x.Student)
                                .SingleAsync(x => x.Id == request.TestId, cancellationToken);

            var studentTest = test.StudentTests.Single(x => x.Student.UserId == currentUserId);

            if (studentTest.TestAnswer != null)
            {
                throw new InvalidOperationException("Ehhez a tanulóhoz már létezik dolgozat megoldás.");
            }

            var testAnswer = new TestAnswer
            {
                Id          = Guid.NewGuid(),
                Started     = DateTime.Now,
                StudentTest = studentTest,
                TaskAnswers = new List <TaskAnswer>()
            };

            context.TestAnswers.Add(testAnswer);
            studentTest.TestAnswer = testAnswer;
            await context.SaveChangesAsync(cancellationToken);

            return(mapper.Map <TestAnswerDetailsResponse>(testAnswer));
        }
コード例 #8
0
        // POST api/<controller>
        public TestAnswer Post(TestAnswer value)
        {
            testRep.TestAnswer.Attach(value);
            testRep.TestAnswer.Add(value);

            testRep.SaveChanges();
            return(value);
        }
コード例 #9
0
ファイル: TestRunView.cs プロジェクト: dKluev/Site
        object GetAnswerText(TestAnswer answer)
        {
            var file = TestControls.AnswerFileView(answer.Id, false);
            var desc = TestReadOnlyView.TestText(answer.Description);

            if (file == null)
            {
                return(desc);
            }
            return(H.l(desc, br, TestControls.AnswerFileView(answer.Id, false)));
        }
コード例 #10
0
        // DELETE api/<controller>/5
        public void Delete(int id)
        {
            TestAnswer ans = testRep.TestAnswer.Find(id);

            if (ans == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            testRep.TestAnswer.Remove(ans);
            testRep.SaveChanges();
        }
コード例 #11
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            TestAnswer testAnswer = await db.TestAnswers.FindAsync(id);

            db.TestAnswers.Remove(testAnswer);
            await db.SaveChangesAsync();

            var ques = db.TestQuestions.Find(testAnswer.TestQuestionId);

            return(RedirectToAction("Update", routeValues: new { controller = "TestThemas", id = ques.TestThemaId }));
        }
コード例 #12
0
        public void Entry(int num, InputType type)
        {
            CanInput      = false;
            IsResultTaken = true;
            var answer = TestAnswer.Answer(ActiveFragment, InctiveFragment, num, Now(), type);

            ActiveIdentifier.Answers.Add(answer);
            if (ActiveIdentifier.Correction)
            {
                LastAnswerStatus = answer.Status;
            }
        }
コード例 #13
0
        // GET: TestAnswers/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TestAnswer testAnswer = db.TestAnswers.Find(id);

            if (testAnswer == null)
            {
                return(HttpNotFound());
            }
            return(View(testAnswer));
        }
コード例 #14
0
ファイル: DBHelper.cs プロジェクト: hmillan92/AutoTest
        public static int GetValue(string value, AtestContext db)
        {
            var testAnswer = db.TestAnswers.Where(s => s.Value == value).FirstOrDefault();

            if (testAnswer == null)
            {
                testAnswer = new TestAnswer {
                    Value = value,
                };
                db.TestAnswers.Add(testAnswer);
                db.SaveChanges();
            }
            return(testAnswer.TestAnswerID);
        }
コード例 #15
0
        public async Task <ActionResult> Edit([Bind(Include = "Id,Answer,Description,ShareWeight,IsCurrect,TestQuestionId")] TestAnswer testAnswer)
        {
            if (ModelState.IsValid)
            {
                db.Entry(testAnswer).State = EntityState.Modified;
                await db.SaveChangesAsync();

                var ques = db.TestQuestions.Find(testAnswer.TestQuestionId);
                return(RedirectToAction("Update", routeValues: new { controller = "TestThemas", id = ques.TestThemaId }));
            }
            var ques1 = db.TestQuestions.Find(testAnswer.TestQuestionId);

            ViewBag.TestThemaId = ques1.TestThemaId;
            return(View(testAnswer));
        }
コード例 #16
0
        public void AddTestAnswer(int testId, string userId, DateTime testStartDate)
        {
            var currentTime      = DateTime.Now;
            var answerTimeOffset = currentTime.Subtract(testStartDate);
            var maxAnswerTime    = new TimeSpan(0, 23, 59, 59, 999);

            var testAnswer = new TestAnswer()
            {
                TestId              = testId,
                UserId              = userId,
                AnsweringTime       = currentTime,
                AnsweringTimeOffset = answerTimeOffset > maxAnswerTime ? maxAnswerTime : answerTimeOffset
            };

            _baseTestRepository.AddAnswer(testAnswer);
        }
コード例 #17
0
ファイル: TestRepository.cs プロジェクト: HickeyK/SpellCheck
        public void ShouldSaveTestAnswer()
        {
            IConnectedRepository repo = new ConnectedRepository();
            var testAnswer            = new TestAnswer()
            {
                AnswerStatus    = "SUCCESS",
                FinalAnswer     = "spelling",
                NumberOfTries   = 1,
                SpellTestId     = 1,
                TestOccuranceId = 5
            };
            var testAnswers = new List <TestAnswer> {
                testAnswer
            };

            repo.SaveTestAnswers(testAnswers);
        }
コード例 #18
0
        // GET: TestAnswers/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TestAnswer testAnswer = await db.TestAnswers.FindAsync(id);

            if (testAnswer == null)
            {
                return(HttpNotFound());
            }
            var ques = db.TestQuestions.Find(testAnswer.TestQuestionId);

            ViewBag.TestThemaId = ques.TestThemaId;
            return(View(testAnswer));
        }
コード例 #19
0
        // PUT api/<controller>/5
        public void Put(int id, TestAnswer value)
        {
            var answer = testRep
                         .TestAnswer
                         .Where(x =>
                                x.Id == id)

                         .FirstOrDefault();

            if (answer == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            answer.IsHide  = value.IsHide;
            answer.IsRight = value.IsRight;
            answer.Text    = answer.Text;
            testRep.SaveChanges();
        }
コード例 #20
0
        public async Task <OperationDetails> CheckAnswer(Guid testResultId, Guid questionId, IEnumerable <Guid> answerIds)
        {
            try
            {
                TestAnswer testAnswer = new TestAnswer
                {
                    TestResultId = testResultId,
                    QuestionId   = questionId,
                };

                bool isAllCorrect = true;
                int  correct      = 0;
                foreach (var id in answerIds)
                {
                    Answer answer = await _uow.AnswerRepository.GetById(id);

                    testAnswer.Answers.Add(answer);
                    if (!answer.IsCorrect)
                    {
                        isAllCorrect = false;
                    }
                    else
                    {
                        correct++;
                    }
                }

                int correctSupposedCount = await _uow.AnswerRepository.CorrectAnswersForQuestionCount(questionId);

                if (isAllCorrect && correct == correctSupposedCount)
                {
                    testAnswer.IsCorrect = true;
                }

                _uow.TestAnswerRepository.Create(testAnswer);
                await _uow.SaveAsync();
            }
            catch (Exception ex)
            {
                return(new OperationDetails(false, ex.Message));
            }

            return(new OperationDetails(true, "Answer checked"));
        }
コード例 #21
0
        public async Task <IActionResult> Edit(int id, [Bind("Id, AnswerText,IsCorrect,TestQuestionId, ImageName, IsCode")] TestAnswer testAnswer)
        {
            if (id != testAnswer.Id)
            {
                return(NotFound());
            }
            var files = HttpContext.Request.Form.Files;

            if (files.Count != 0)
            {
                files.First().IsImage(_photoConfig, ModelState);
            }
            if (ModelState.IsValid)
            {
                if (files.Count != 0)
                {
                    if (testAnswer.ImageName is null || _testingPlatform.AnswerImageManager.DeleteAnswerImage(testAnswer.ImageName))
                    {
                        var imageName = $"{Guid.NewGuid().ToString().Replace("-", "")}{Path.GetExtension(files.First().FileName)}";
                        if (await _testingPlatform.AnswerImageManager.SaveAnswerImageAsync(files.First(), imageName))
                        {
                            testAnswer.ImageName = imageName;
                        }
                    }
                }
                else
                {
                    testAnswer.ImageName = (await _testingPlatform.TestAnswerManager
                                            .GetAll()
                                            .AsNoTracking()
                                            .FirstOrDefaultAsync(ta => ta.Id == id))
                                           .ImageName;
                }
                testAnswer.AppUserId = _userId;
                await _testingPlatform.TestAnswerManager.UpdateAsync(testAnswer);

                return(RedirectToAction(nameof(Index), new { id = testAnswer.TestQuestionId }));
            }

            testAnswer = await _testingPlatform.TestAnswerManager.FindAsync(ta => ta.AppUserId == _userId && ta.Id == id);

            return(View(testAnswer));
        }
コード例 #22
0
ファイル: TestEditController.cs プロジェクト: dKluev/Site
        public ActionResult EditAnswer(TestAnswer model)
        {
            EditQuestionPermission(model.QuestionId);
            if (!LinqToSqlValidator.Validate(ModelState, model))
            {
                return(ErrorJson());
            }
            TestAnswerService.EnableTracking();
            if (model.Id == 0)
            {
                TestAnswerService.InsertAndSubmit(model);
                return(UrlJson(Url.TestEdit().Urls.EditAnswer(model.QuestionId, model.Id)));
            }
            var oldModel = TestAnswerService.GetByPK(model.Id);

            oldModel.Update(model, x => x.Description, x => x.IsRight, x => x.ComparableId, x => x.Sort);
            TestAnswerService.SubmitChanges();
            return(OkJson());
        }
コード例 #23
0
        public ActionResult TakeTest(List <double> Answers)
        {
            var userId      = User.FindFirstValue(ClaimTypes.NameIdentifier);
            var testAnswers = new List <TestAnswer>();
            var Questions   = _context.RoadieTestQuestions.Where(x => true).ToList();
            int i           = 0;

            foreach (var answer in Answers)
            {
                var ans = new TestAnswer();
                ans.Answer     = answer;
                ans.UserId     = userId;
                ans.QuestionId = Questions[i++].QuestionId;
                _context.TestAnswers.Add(ans);
            }

            _context.SaveChanges();
            //return View();
            return(RedirectToAction("SimilarUsers", "UserAccount"));
        }
コード例 #24
0
        public JsonResult SubmitCheckout(int detailsId, int answerId)
        {
            var details = offlineDB.ExaminationDetails.SingleOrDefault(m => m.ID == detailsId);

            if (details != null)
            {
                TestAnswer answer = offlineDB.TestAnswer.SingleOrDefault(m => m.ID == answerId);
                if (answer.AnswerProperty)
                {
                    details.Result = true;
                }
                else
                {
                    details.Result = false;
                }
                offlineDB.SaveChanges();
                return(Json(new { result = "SUCCESS", questionresult = details.Result }, JsonRequestBehavior.AllowGet));
            }
            return(Json(new { result = "FAIL" }));
        }
コード例 #25
0
        public ActionResult SaveAnswerAndRedirect(int testNumber)
        {
            var test       = _context.Set <Test>().First(el => el.Number == testNumber);
            var testAnswer = new TestAnswer()
            {
                TestId              = test.Id,
                UserId              = User.Identity.GetUserId(),
                AnsweringTime       = DateTime.Now,
                AnsweringTimeOffset = DateTime.Now.Subtract(test.StartDate.Value)
            };

            _context.Set <TestAnswer>().Add(testAnswer);
            _context.SaveChanges();

            var vm = new AnswerVm()
            {
                TestAnswer = testAnswer, TestNumber = testNumber
            };

            return(View("Answered", vm));
        }
コード例 #26
0
        public async Task <ActionResult> CreateFinish(int clientTestHistoryId, string comment)
        {
            ClientTestHistory clientTestHistory = db.ClientTestHistories.Find(clientTestHistoryId);

            clientTestHistory.Comment         = comment;
            db.Entry(clientTestHistory).State = EntityState.Modified;
            await db.SaveChangesAsync();

            // Баллын есептеу

            double totalPoint = clientTestHistory.TotalPoint;
            double point      = 0;
            List <TestQuestion> testQuestions = await db.TestQuestions.Include(u => u.TestAnswers).Where(u => u.TestThemaId == clientTestHistory.TestThemaId).ToListAsync();

            double totalWeight = testQuestions.Select(u => u.ShareWeight).Sum();
            List <ClientTestQuestion> clientTestQuestions = await db.ClientTestQuestions.Include(u => u.ClientSelectedAnswers).Where(u => u.ClientTestHistoryId == clientTestHistoryId).ToListAsync();

            foreach (var clQues in clientTestQuestions)
            {
                TestQuestion testQuestion         = testQuestions.Where(u => u.Id == clQues.TestQuestionId).First();
                double       quesTotalPoint       = testQuestion.ShareWeight / totalWeight * totalPoint;
                double       curAnsTotalWeight    = testQuestion.TestAnswers.Where(u => u.IsCurrect).Select(u => u.ShareWeight).Sum();
                double       curSelectTotalWeight = 0;
                foreach (var selectAns in clQues.ClientSelectedAnswers)
                {
                    TestAnswer testAnswer = testQuestion.TestAnswers.Where(u => u.Id == selectAns.TestAnswerId).First();
                    if (testAnswer.IsCurrect)
                    {
                        curSelectTotalWeight += testAnswer.ShareWeight;
                    }
                }

                point += curSelectTotalWeight / curAnsTotalWeight * quesTotalPoint;
            }
            clientTestHistory.Point           = point;
            db.Entry(clientTestHistory).State = EntityState.Modified;
            await db.SaveChangesAsync();

            return(RedirectToAction("Details", routeValues: new { id = clientTestHistoryId }));
        }
コード例 #27
0
ファイル: TestEditController.cs プロジェクト: dKluev/Site
        public ActionResult EditAnswer(int questionId, int?id)
        {
            var model = new TestAnswer();

            EditQuestionPermission(questionId);
            if (id.HasValue)
            {
                TestAnswerService.LoadWith(x => x.TestQuestion);
                model = TestAnswerService.GetByPK(id.Value);
                if (model.ComparableId.HasValue)
                {
                    model.ComparableAnswer = TestAnswerService.GetByPK(model.ComparableId.Value);
                }
            }
            else
            {
                model.QuestionId   = questionId;
                model.TestQuestion = TestQuestionService.GetByPK(questionId);
            }
            return(BaseView(
                       new PagePart(new AnswerEditView().Init(model, Url))));
        }
コード例 #28
0
ファイル: MainWindow.cs プロジェクト: s4rduk4r/MyTest
    protected void AddAnswerClick(object sender, EventArgs e)
    {
        TreeIter iter;

        QuestionEditArea.Selection.GetSelected(out iter);
        var question = testQuestions.GetValue(iter, 0) as TestQuestion;

        if (question == null)
        {
            return;
        }
        var dlgAddAnswer = new OneStringAskDlg("Новый ответ", true, "Верный ответ");

        dlgAddAnswer.Modal = true;
        if (dlgAddAnswer.Run() == (int)ResponseType.Ok)
        {
            var newAnswer = new TestAnswer(dlgAddAnswer.Value, dlgAddAnswer.IsChecked);
            question.Answers.Add(newAnswer);
            testAnswers.AppendValues(newAnswer);
        }
        dlgAddAnswer.Destroy();
    }
コード例 #29
0
        public async Task <IActionResult> Create([Bind("AnswerText,IsCorrect,TestQuestionId, IsCode")] TestAnswer testAnswer)
        {
            var files = HttpContext.Request.Form.Files;

            if (files.Count != 0)
            {
                files.First().IsImage(_photoConfig, ModelState);
            }
            if (ModelState.IsValid)
            {
                if (files.Count != 0)
                {
                    var imageName = $"{Guid.NewGuid().ToString().Replace("-", "")}{Path.GetExtension(files.First().FileName)}";
                    if (await _testingPlatform.AnswerImageManager.SaveAnswerImageAsync(files.First(), imageName))
                    {
                        testAnswer.ImageName = imageName;
                    }
                }


                testAnswer.AppUserId = _userId;
                await _testingPlatform.TestAnswerManager.AddAsync(testAnswer);

                return(RedirectToAction(nameof(Index), new { id = testAnswer.TestQuestionId }));
            }
            else
            {
                var testQuestion = await _testingPlatform.TestQuestionManager
                                   .FindAsync(tq => tq.AppUserId == _userId && tq.Id == testAnswer.TestQuestionId);

                if (testQuestion is null)
                {
                    return(NotFound());
                }
                testAnswer.TestQuestion = testQuestion;
            }
            return(View(testAnswer));
        }
コード例 #30
0
        public ActionResult Create(Test input)
        {
            int timeSpent = int.Parse(HttpContext.Request.Form["timeSpent"]);


            var test = new Test {
                Email = HttpContext.Request.Form["email"].ToString(), TimeinSeconds = timeSpent
            };
            var totalQuestions = int.Parse(HttpContext.Request.Form["totalQuestions"]);

            _context.Test.Add(test);
            _context.SaveChanges();



            /*
             * on the form itself I created a hidden field where I can see the total questions
             * I'm looping through each one and get the original question from it as well
             * I chose not to link the tests with questions or with the question options, otherwise it might make issues when deleting questions with options.
             */

            for (int i = 1; i <= totalQuestions; i++)
            {
                int questionId = int.Parse(HttpContext.Request.Form["questionId" + i]);

                var question = _context.Question.SingleOrDefault(q => q.Id == questionId);

                var answer = new TestAnswer {
                    QuestionText = question.QuestionString, AnswerText = HttpContext.Request.Form["questionInput" + i].ToString(), Test = test
                };

                _context.TestAnswer.Add(answer);
                _context.SaveChanges();
            }

            // Redirecting away from the route, otherwise it will continue submitting info when refreshing the page
            return(RedirectToAction("Done"));
        }
コード例 #31
0
ファイル: IOTA.Designer.cs プロジェクト: nipuna/MvsAPI
 public void AddToTestAnswers(TestAnswer testAnswer)
 {
     base.AddObject("TestAnswers", testAnswer);
 }
コード例 #32
0
ファイル: IOTA.Designer.cs プロジェクト: nipuna/MvsAPI
 public static TestAnswer CreateTestAnswer(int id)
 {
     TestAnswer testAnswer = new TestAnswer();
     testAnswer.ID = id;
     return testAnswer;
 }
コード例 #33
0
        public void Update_WhenMatchingAnswerIsFound_UpdatesAnswer()
        {
            var request = new TestRequest { RootText = "ABC", RootNumber = 222 };
            var dataContext = new SourceData(request);

            var childMapping1 = new SimpleFieldMapping(
                ReflectionHelper.GetProperty<TestAnswer>(x => x.Text),
                dc => dc.GetPropertyValue("RootText"),
                true,
                new SafeTypeConverter());
            var childMapping2 = new SimpleFieldMapping(
                ReflectionHelper.GetProperty<TestAnswer>(x => x.Number),
                dc => dc.GetPropertyValue("RootNumber"),
                false,
                new SafeTypeConverter());

            var dtm = Mock.Create<IDynamicTypeManager>(Behavior.Loose);
            Mock.Arrange(() => dtm.NewEditableChild<IEditableRoot>(AnswerProcessName)).Returns(() => new TestAnswer());

            var mapping = new ChecklistFieldMapping(ReflectionHelper.GetProperty<TestEdit>(x => x.Checklist), null, new[] { childMapping1, childMapping2 }, dtm);

            var editItem = new TestEdit();
            var answer = new TestAnswer { Text = "abc", Number = 111 };
            editItem.Checklist.AnswerProcessList.Add(answer);

            // Act.
            mapping.Update(dataContext, editItem);

            // Assert.
            Assert.AreEqual(1, editItem.Checklist.AnswerProcessList.Count);
            Assert.IsTrue(editItem.Checklist.AnswerProcessList.Contains(answer));
            Assert.AreEqual("ABC", answer.Text);
            Assert.AreEqual(222, answer.Number);
        }
コード例 #34
0
        public async Task<RedirectToRouteResult> LoadFromFile(HttpPostedFileBase file)
        {
            var test = new SiteTestModel();
            var questions = new List<string>();
            var subjects = new List<string>();

            using (var excel = new ExcelPackage(file.InputStream))
            {
                var ws = excel.Workbook.Worksheets.First();

                var range = ws.Cells["A1"];
                test.Title = range.Value.ToString().Trim();

                range = ws.Cells["B1"];
                test.Desc = range.Value?.ToString().Trim();

                //questions
                range = ws.Cells["C1"];
                var startRow = range.Start.Row;
                var startColumn = range.Start.Column;
                var count = 0;
                while (range.Value != null)
                {
                    count++;
                    questions.Add(range.Value.ToString().Trim());
                    range = ws.Cells[startRow, startColumn + count];
                }
                test.Questions = questions.ToArray();
                count = 0;

                range = ws.Cells["A2"];
                startRow = range.Start.Row;
                startColumn = range.Start.Column;
                while (range.Value != null)
                {
                    count++;
                    subjects.Add(range.Value.ToString().Trim());
                    range = ws.Cells[startRow + count, startColumn];
                }
                test.Subjects = subjects.ToArray();

                range = ws.Cells["A2"];
                TestAnswer answer;
                string subjectTitle;
                string subjectDesc;
                for (int i = 0; i < test.Subjects.Length; i++)
                {
                    subjectTitle = range.Value.ToString().Trim();

                    startColumn++;
                    range = ws.Cells[startRow, startColumn];
                    subjectDesc = range.Value?.ToString().Trim();

                    for (int y = 0; y < test.Questions.Length; y++)
                    {
                        startColumn++;
                        range = ws.Cells[startRow, startColumn];
                        answer = new TestAnswer
                        {
                            SubjectTitle = subjectTitle,
                            SubjectDesc = subjectDesc,
                            Question = test.Questions[y],
                            IsCorrect = range.Value != null && range.Value.ToString() == "1" ? true : false
                        };
                        test.Answers.Add(answer);
                    }
                    startRow++;
                    startColumn = 1;
                    range = ws.Cells[startRow, startColumn];
                }

                var id = await writeSiteTestToDb(test);
                return RedirectToAction("edit", new { id = id });
            }
        }