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) )); }
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)); }
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)))); }
private string GetTitle(AjaxGridVM model) { return(model.Caption); }