public async Task<ActionResult> SkillCreatePartial(SkillCreatePostModel result) { //Parse the data and configure a Skill model SkillRequirement model = new SkillRequirement(); foreach (TraitRank rank in result.Selection) { model.GetType().GetProperty(rank.PropertyName).SetValue(model, rank.Rank); } model.Id = Guid.NewGuid(); //Create a new Db context ApplicationDbContext context = new ApplicationDbContext(); //Store the model context.SkillRequirements.Add(model); await context.SaveChangesAsync(); //Update the appropriate account switch (result.CreatorType) { case (SkillCreatorType.SeekerAccount): { SeekerAccount account = (from s in context.SeekerAccounts where s.Id == result.CreatorId select s).FirstOrDefault(); if (account == null) break; context.SeekerAccounts.Attach(account); var entry = context.Entry(account); entry.Reference(e => e.SkillRequirement).CurrentValue = model; await context.SaveChangesAsync(); return RedirectToAction("Index", "Seeker", new { area = "" }); } case (SkillCreatorType.JobPosting): { JobPosting account = (from s in context.JobPostings where s.Id == result.CreatorId select s).FirstOrDefault(); if (account == null) break; context.JobPostings.Attach(account); var entry = context.Entry(account); entry.Reference(e => e.SkillRequirement).CurrentValue = model; await context.SaveChangesAsync(); break; } default: { break; } } return null; }
public ActionResult SkillCreatePartialJobPosting(JobPosting model) { SkillRequirement Skill = new SkillRequirement(); List<Trait> listItems = new List<Trait>(); foreach (var prop in from s in Skill.GetType().GetProperties() select s) { if (!prop.PropertyType.Equals(typeof(int?))) continue; Trait item = new Trait { DisplayName = prop.Name, PropertyName = prop.Name }; listItems.Add(item); } SkillCreateViewModel viewModel = new SkillCreateViewModel { CreatorType = SkillCreatorType.JobPosting, CreatorId = model.Id, Traits = listItems }; return PartialView("SkillCreatePartial", viewModel); }