public ActionResult AddProblem(ProblemDetailModel model) { // 检查参数。 if (string.IsNullOrEmpty(Request.QueryString["id"])) { return(Redirect("~/Contest")); } int contestId; if (!int.TryParse(Request.QueryString["id"], out contestId)) { return(Redirect("~/Contest")); } if (!ContestManager.Default.IsContestExist(contestId)) { return(Redirect("~/Contest")); } // 验证数据模型。 if (!TryValidateModel(model)) { ViewBag.TitleErrorMessage = ModelStateHelper.GetFirstError(ModelState, "Title"); return(View(model)); } ContestHandle contestHandle = new ContestHandle(contestId); using (ContestDataProvider contestData = ContestDataProvider.Create(contestHandle, false)) { // 验证用户操作权限。 if (!UserSession.IsAuthorized(Session) || string.Compare(contestData.Creator, UserSession.GetUsername(Session), false) != 0) { return(Redirect("~/Error/AccessDenied")); } // 在题目库中创建题目。 ProblemHandle problemHandle = ProblemArchieveManager.Default.CreateProblem( contestData.PeekNextProblemId()); model.ResetNullStrings(); model.SaveTo(problemHandle); // 为避免死锁,该句不应放置在下面的 using 块中。 using (ProblemDataProvider problemData = ProblemDataProvider.Create(problemHandle, false)) { problemData.ContestId = contestId; problemData.AuthorizationGroup = UserGroup.Guests; } // 将创建的题目添加至当前比赛中。 contestData.AddProblem(problemHandle); } return(Redirect($"~/Contest/Show?id={contestId}")); }
public ActionResult Add(ProblemDetailModel model) { if (!UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session))) { // 用户权限不足。 return(Redirect("~/Error/AccessDenied")); } // 检查数据模型验证状态。 bool hasError = false; TryValidateModel(model); if (ModelState.ContainsKey("Id") && ModelState["Id"].Errors.Count > 0) { hasError = true; ViewBag.ProblemIdErrorMessage = ModelState["Id"].Errors[0].ErrorMessage; } if (ModelState.ContainsKey("Title") && ModelState["Title"].Errors.Count > 0) { hasError = true; ViewBag.TitleErrorMessage = ModelState["Title"].Errors[0].ErrorMessage; } if (hasError) { return(View(model)); } string problemId = "BIT" + model.ProblemId; if (ProblemArchieveManager.Default.IsProblemExist(problemId)) { ViewBag.ProblemIdErrorMessage = "Problem with the same ID already exist in the archieve."; return(View(model)); } // 在题目库中创建新题目。 ProblemHandle handle = ProblemArchieveManager.Default.CreateProblem(problemId); model.SaveTo(handle); return(Redirect("~/Archieve")); }
public ActionResult Modify(ProblemDetailModel model) { if (!UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session))) { return(Redirect("~/Error/AccessDenied")); } // 验证模型。 bool hasError = false; TryValidateModel(model); if (ModelState["Title"] != null && ModelState["Title"].Errors.Count > 0) { hasError = true; ViewBag.TitleErrorMessage = ModelState["Title"].Errors[0].ErrorMessage; } if (hasError) { return(View(model)); } // 查询题目实体。 ProblemHandle handle = ProblemArchieveManager.Default.GetProblemById(model.ProblemId); if (handle == null) { return(Redirect("~/Error/ProblemNotExist")); } // 写入修改后的数据。 model.ResetNullStrings(); model.SaveTo(handle); return(Redirect("~/Archieve")); }