示例#1
0
        public ActionResult EditTest(int?id)
        {
            var        test            = new Test();
            AjaxGridVM modulesModel    = null;
            AjaxGridVM moduleSetsModel = null;
            AjaxGridVM questionsModel  = null;
            var        modules         = new List <TestModule>();
            var        modulePercents  = new Dictionary <int, int>();

            if (id.HasValue)
            {
                TestService.LoadWith(x => x.TestPassRule);
                test = TestService.GetByPK(id);
                EditTestPermission(test.Id);
                modulesModel = new AjaxGridVM {
                    GetListUrl = Url.Action <TestEditController>(c => c.GetModules(id.Value, null)),
                    EditUrl    = Url.Action <TestEditController>(c => c.EditModule(id.Value, null)),
                    DeleteUrl  = Url.Action <TestEditController>(c => c.DeleteModule(null)),
                    Caption    = "Модули"
                };
                AddColumns <TestModule>(modulesModel, x => x.Name);
                moduleSetsModel = new AjaxGridVM {
                    GetListUrl = Url.Action <TestEditController>(c => c.GetModuleSets(id.Value, null)),
                    EditUrl    = Url.Action <TestEditController>(c => c.EditModuleSet(id.Value, null)),
                    Caption    = "План тестирования"
                };
                AddColumns <TestModuleSet>(moduleSetsModel, x => x.Number);
                AddColumns <TestModuleSet>(moduleSetsModel, x => x.Description);
                questionsModel = new AjaxGridVM {
                    GetListUrl = Url.Action <TestEditController>(c => c.GetQuestions(id.Value, null)),
                    EditUrl    = Url.Action <TestEditController>(c => c.EditQuestion(id.Value, null)),
                    DeleteUrl  = Url.Action <TestEditController>(c => c.DeleteQuestion(null)),
                    Caption    = "Вопросы"
                };
                AddColumns <TestQuestion>(questionsModel, x => x.Description);
                modulePercents = EntityUtils.GetModulePercents(test.TestPassRule);
                modules        = TestModuleService.GetAll(x => x.TestId == id.Value).ToList();
            }
            test.TestPassRule = test.TestPassRule ?? new TestPassRule();

            var testEditVM = new TestEditVM {
                Test       = test,
                CourseName = CourseService.AllCourseLinks()
                             .GetValueOrDefault(test.CourseTCList).GetOrDefault(x => x.WebName),
                Modules        = modules,
                ModulePercents = modulePercents
            };

            return(BaseView(
                       new PagePart(new TestEditView().Init(testEditVM, Url)),
                       modulesModel == null ? null : new PagePart(PartialViewNames.AjaxList, modulesModel),
                       questionsModel == null ? null : new PagePart(PartialViewNames.AjaxList, questionsModel),
                       moduleSetsModel == null || test.CompanyId.HasValue ? null : new PagePart(PartialViewNames.AjaxList, moduleSetsModel)
                       ));
        }
示例#2
0
        public void AddColumns <T>(AjaxGridVM model,
                                   params Expression <Func <T, object> >[] selectors)
        {
            var metaData = MetaDataProvider.Get(typeof(T)).GetProperties();
            var columns  = new Dictionary <string, AjaxGridVM.Column>();

            foreach (var selector in selectors)
            {
                var info = ExpressionUtils.GetPropertyInfo(selector);
                var meta = metaData.First(x => x.Info == info);
                columns.Add(meta.DisplayName(), new AjaxGridVM.Column(info.Name));
            }
            model.ColumnTitles.AddRange(columns.Select(x => x.Key));
            model.Columns.AddRange(columns.Select(x => x.Value));
        }
示例#3
0
        public ActionResult EditQuestion(int testId, int?id)
        {
            EditTestPermission(testId);
            var model = new TestQuestion();

            TestQuestionService.LoadWith(x => x.TestModule);
            AjaxGridVM answersModel = null;

            if (id.HasValue)
            {
                model        = TestQuestionService.GetByPK(id.Value);
                answersModel = new AjaxGridVM {
                    GetListUrl = Url.Action <TestEditController>(c => c.GetAnswers(id.Value, null)),
                    EditUrl    = Url.Action <TestEditController>(c => c.EditAnswer(id.Value, null)),
                    DeleteUrl  = Url.Action <TestEditController>(c => c.DeleteAnswer(null)),
                    Caption    = "Ответы"
                };
                AddColumns <TestAnswer>(answersModel, x => x.Description);
                switch (model.Type)
                {
                case TestQuestionType.OneAnswer:
                case TestQuestionType.ManyAnswers:
                    AddColumns <TestAnswer>(answersModel, x => x.IsRight);
                    break;

                case TestQuestionType.Comparison:
                    AddColumns <TestAnswer>(answersModel, x => x.ComparableId);
                    break;

                case TestQuestionType.Sort:
                    AddColumns <TestAnswer>(answersModel, x => x.Sort);
                    break;

                default:
                    throw new Exception("TestQuestionType out of range");
                }
            }
            else
            {
                model.TestId = testId;
            }
            return(BaseView(
                       new PagePart(new QuestionEditView().Init(model, Url)),
                       answersModel.IfNotNull(x => new PagePart(PartialViewNames.AjaxList, x))));
        }
示例#4
0
 private string GetTitle(AjaxGridVM model)
 {
     return(model.Caption);
 }