Beispiel #1
0
        /// <summary>
        /// 从给定的题目句柄创建新的数据模型对象。
        /// </summary>
        /// <param name="handle">题目句柄。</param>
        /// <exception cref="ArgumentNullException"/>
        public static ProblemDisplayModel FromProblemHandle(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            ProblemDisplayModel model    = new ProblemDisplayModel();
            Markdown            markdown = new Markdown();

            using (ProblemDataProvider data = ProblemDataProvider.Create(handle, true))
            {
                model.ProblemId         = data.ProblemId;
                model.Title             = data.Title;
                model.Description       = markdown.Transform(data.Description);
                model.InputDescription  = markdown.Transform(data.InputDescription);
                model.OutputDescription = markdown.Transform(data.OutputDescription);
                model.InputExample      = markdown.Transform(data.InputExample);
                model.OutputExample     = markdown.Transform(data.OutputExample);
                model.Hint           = markdown.Transform(data.Hint);
                model.Source         = data.Source;
                model.Author         = data.Author;
                model.TimeLimit      = data.TimeLimit;
                model.MemoryLimit    = data.MemoryLimit;
                model.IsSpecialJudge = data.IsSpecialJudge;
            }

            return(model);
        }
        // GET: Archieve/Modify
        public ActionResult Modify()
        {
            if (!UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session)))
            {
                return(Redirect("~/Error/AcceesDenied"));
            }
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                // 缺少题目 ID。
                return(Redirect("~/Error/ProblemNotExist"));
            }
            ;

            // 查询题目信息。
            ProblemHandle handle = ProblemArchieveManager.Default.GetProblemById(Request.QueryString["id"]);

            if (handle == null)
            {
                // 题目不存在于数据库中。
                return(Redirect("~/Error/ProblemNotExist"));
            }

            ProblemDetailModel model = ProblemDetailModel.FromProblemHandle(handle);

            return(View(model));
        }
        /// <summary>
        /// 从给定的题目句柄创建 ProblemDetailModel 类的新实例。
        /// </summary>
        /// <param name="handle">题目句柄。</param>
        /// <exception cref="ArgumentNullException"/>
        public static ProblemDetailModel FromProblemHandle(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            ProblemDetailModel model = new ProblemDetailModel();

            using (ProblemDataProvider data = ProblemDataProvider.Create(handle, true))
            {
                model.ProblemId         = data.ProblemId;
                model.Title             = data.Title;
                model.Description       = data.Description;
                model.InputDescription  = data.InputDescription;
                model.OutputDescription = data.OutputDescription;
                model.InputExample      = data.InputExample;
                model.OutputExample     = data.OutputExample;
                model.Hint          = data.Hint;
                model.Source        = data.Source;
                model.Author        = data.Author;
                model.UserGroupName = UsergroupConvert.ConvertToString(data.AuthorizationGroup);
            }

            return(model);
        }
Beispiel #4
0
        /// <summary>
        /// 解析指定 ProblemHandle 对象的全局统一定位符(URL)。
        /// </summary>
        /// <param name="entry">待解析的 ProblemHandle 对象。</param>
        /// <returns>给定 ProblemHandle 对象所对应的全局统一定位符(URL)。</returns>
        /// <exception cref="ArgumentNullException"/>
        /// <exception cref="InvalidProblemException"/>
        public string Get(ProblemHandle entry)
        {
            if (entry == null)
            {
                throw new ArgumentNullException(nameof(entry));
            }

            ProblemUrlResolverRule rule = GetRule(entry.ProblemId);

            if (rule == null)
            {
                throw new InvalidProblemException(entry);
            }

            // 解析对应的掩码项得到给定 ProblemEntry 的全局统一定位符。

            /*
             *
             * MaskTokenReader reader = new MaskTokenReader(rule.Mask);
             * MaskTokenHandler[] handlers = new MaskTokenHandlers[] {
             *  ...
             * };
             *
             * MaskInterpreter interpreter = new MaskInterpreter(reader, handlers);
             * return interpreter.Interpret();
             *
             */
        }
        // GET: Archieve/Environment?id={ProblemID}
        public ActionResult Environment()
        {
            // 检查用户权限。
            if (!UserSession.IsAuthorized(Session) ||
                !UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session)))
            {
                return(Redirect("~/Error/AccessDenied"));
            }

            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                return(Redirect("~/Archieve"));
            }

            ProblemHandle handle = ProblemArchieveManager.Default.GetProblemById(Request.QueryString["id"]);

            if (handle == null)
            {
                return(Redirect("~/Error/ProblemNotExist"));
            }

            ProblemEnvironmentModel model = ProblemEnvironmentModel.FromProblemHandle(handle);

            return(View(model));
        }
        // GET: Archieve/ShowProblem?id=...
        public ActionResult ShowProblem(string id = null)
        {
            if (id == null)
            {
                return(Redirect("~/Archieve"));
            }

            ProblemHandle handle = new ProblemHandle(id);

            if (handle.IsNativeProblem)
            {
                return(View());
            }
            else
            {
                // 解析远程 OJ 题目 URL。
                IProblemUrlResolver resolver = ProblemUrlResolverFactory.GetUrlResolverFor(handle);
                if (resolver == null)
                {
                    // 没有此题目来源 OJ 的 URL 解析器。
                    return(Redirect("~/Error/OJNotSupported"));
                }
                else
                {
                    return(Redirect(resolver.Resolve(handle)));
                }
            }
        }
        public ActionResult ProblemDetail()
        {
            string problemId = Request.QueryString["id"];

            if (string.IsNullOrEmpty(problemId))
            {
                return(QueryResult(1, "Problem ID required."));
            }

            ProblemHandle problemHandle = ProblemArchieveManager.Default.GetProblemById(problemId);

            if (problemHandle == null)
            {
                return(QueryResult(2, "No such problem."));
            }

            // 检查用户操作权限。
            UserHandle userHandle = UserSession.IsAuthorized(Session)
                ? new UserHandle(UserSession.GetUsername(Session))
                : null;

            if (!ProblemAuthorization.GetUserAccess(problemHandle, userHandle).HasFlag(DataAccess.Read))
            {
                return(QueryResult(3, "Access denied."));
            }

            return(QueryResult(ProblemDisplayModel.FromProblemHandle(problemHandle)));
        }
Beispiel #8
0
        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}"));
        }
Beispiel #9
0
        public string Resolve(ProblemHandle handle)
        {
            string numericId = handle.ProblemId.Substring(3);
            int    result;

            if (!int.TryParse(numericId, out result))
            {
                throw new InvalidProblemException(handle);//不合法
            }
            return("http://acm.hdu.edu.cn/showproblem.php?pid=" + result);
        }
        public string Resolve(ProblemHandle handle)
        {
            string numericId = handle.ProblemId.Substring(3);
            int    result;

            if (!int.TryParse(numericId, out result))
            {
                throw new InvalidProblemException(handle);//不合法
            }
            return("http://poj.org/problem?id=" + result);
        }
        public string Resolve(ProblemHandle handle)
        {
            string numericId = handle.ProblemId.Substring(4);
            int    result;

            if (!int.TryParse(numericId, out result))
            {
                throw new InvalidProblemException(handle);//不合法
            }
            return("http://www.lydsy.com/JudgeOnline/problem.php?id=" + result);
        }
        public string Resolve(ProblemHandle handle)
        {
            string numericId = handle.ProblemId.Substring(3);
            int    result;

            if (!int.TryParse(numericId, out result))
            {
                throw new InvalidProblemException(handle);//不合法
            }
            return("http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=" + result);
        }
        /// <summary>
        /// 检查给定的用户能否访问给定的题目。
        /// </summary>
        /// <param name="problemHandle">题目句柄。</param>
        /// <param name="userHandle">用户句柄。若当前会话尚未活动登录用户,传入 null。</param>
        /// <returns>一个值,该值只是给定身份权限的用户能否访问给定的题目。</returns>
        /// <exception cref="ArgumentNullException"/>
        public static DataAccess GetUserAccess(ProblemHandle problemHandle, UserHandle userHandle)
        {
            if (problemHandle == null)
            {
                throw new ArgumentNullException(nameof(problemHandle));
            }

            /*
             * 检查顺序如下:
             * 1. 用户为管理员;
             * 2. 题目为比赛题目;
             * 3. 用户用户组权限低于题目要求的最低用户组权限。
             *
             */

            // 检查用户是否为管理员身份。
            if (userHandle != null && UserAuthorization.CheckAccessRights(UserGroup.Administrators,
                                                                          UserAuthorization.GetUserGroup(userHandle)))
            {
                return(DataAccess.ReadWrite);
            }

            using (ProblemDataProvider problemData = ProblemDataProvider.Create(problemHandle, true))
            {
                if (problemData.ContestId != -1)
                {
                    // 比赛题目。
                    if (userHandle == null)
                    {
                        return(DataAccess.None);
                    }

                    ContestHandle contestHandle = ContestManager.Default.QueryContestById(problemData.ContestId);
                    return(ContestAuthorization.GetUserAccess(contestHandle, userHandle));
                }
                else
                {
                    // 主题目库题目
                    UserGroup usergroup = (userHandle == null)
                        ? UserGroup.Guests : UserAuthorization.GetUserGroup(userHandle);

                    if (UserAuthorization.CheckAccessRights(problemData.AuthorizationGroup, usergroup))
                    {
                        return(DataAccess.Read);
                    }
                    else
                    {
                        return(DataAccess.None);
                    }
                }
            }
        }
        public string Resolve(ProblemHandle handle)
        {
            string numericId = handle.ProblemId.Substring(3);
            string nameXu    = numericId.Substring(6);

            numericId = numericId.Substring(0, 6);
            int result;

            if (!int.TryParse(numericId, out result) || !(nameXu[0] >= 'A' && nameXu[0] <= 'Z'))
            {
                throw new InvalidProblemException(handle);//不合法
            }
            return("http://codeforces.com/gym/" + result + "/problem/" + nameXu);
        }
        // GET: Archieve/TestSet?id={ProblemID}
        public ActionResult TestSet()
        {
            // 执行用户身份验证。
            if (!UserSession.IsAuthorized(Session))
            {
                return(Redirect("~/Error/AccessDenied"));
            }

            // 检查查询参数。
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                return(Redirect("~/Archieve"));
            }

            string        problemId     = Request.QueryString["id"];
            ProblemHandle problemHandle = ProblemArchieveManager.Default.GetProblemById(problemId);

            if (problemHandle == null)
            {
                // 给定的题目不存在。
                return(Redirect("~/Archieve"));
            }

            using (ProblemDataProvider problemData = ProblemDataProvider.Create(problemHandle, true))
            {
                // 执行进一步身份验证。
                if (problemData.ContestId == -1)
                {
                    if (!UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session)))
                    {
                        return(Redirect("~/Error/AccessDenied"));
                    }
                }
                else
                {
                    ContestHandle contestHandle = new ContestHandle(problemData.ContestId);
                    using (ContestDataProvider contestData = ContestDataProvider.Create(contestHandle, true))
                    {
                        if (string.Compare(contestData.Creator, UserSession.GetUsername(Session), false) != 0)
                        {
                            return(Redirect("~/Error/AccessDenied"));
                        }
                    }
                }
            }

            // TODO: 完成 Archieve/TestSet 控制器逻辑。
            return(View());
        }
Beispiel #16
0
        /// <summary>
        /// 解析给定题目句柄的源 OJ 信息。
        /// </summary>
        /// <param name="handle">要解析的题目句柄。</param>
        /// <returns>一个 OJSystem 枚举值,表示给定题目句柄的源 OJ 信息。</returns>
        /// <exception cref="ArgumentNullException"/>
        public static OJSystem Resolve(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            foreach (KeyValuePair <string, OJSystem> map in ms_prefixes)
            {
                if (handle.ProblemId.StartsWith(map.Key, StringComparison.CurrentCultureIgnoreCase))
                {
                    return(map.Value);
                }
            }
            return(OJSystem.BIT);
        }
Beispiel #17
0
        public ActionResult AddArchieveProblem(FormCollection form)
        {
            // 验证参数。
            if (string.IsNullOrEmpty(Request.QueryString["contestId"]) ||
                string.IsNullOrEmpty(form["ProblemId"]))
            {
                return(new ContentResult());
            }

            string problemId = form["ProblemId"];

            int contestId;

            if (!int.TryParse(Request.QueryString["contestId"], out contestId))
            {
                return(new ContentResult());
            }

            if (!ProblemArchieveManager.Default.IsProblemExist(problemId) ||
                !ContestManager.Default.IsContestExist(contestId))
            {
                return(new ContentResult());
            }

            using (ContestDataProvider contestData = ContestDataProvider.Create(new ContestHandle(contestId), false))
            {
                // 检查用户操作权限。
                if (!UserSession.IsAuthorized(Session) ||
                    string.Compare(contestData.Creator, UserSession.GetUsername(Session), false) != 0)
                {
                    return(new ContentResult());
                }

                // 执行操作。
                // 创建源题目的精确副本到当前比赛中。
                ProblemHandle newProblemHandle = ProblemArchieveManager.Default.CloneProblem(
                    contestData.PeekNextProblemId(), problemId);
                using (ProblemDataProvider problemData = ProblemDataProvider.Create(newProblemHandle, false))
                {
                    problemData.ContestId = contestId;
                }

                contestData.AddProblem(newProblemHandle);
            }

            return(new ContentResult());
        }
        /// <summary>
        /// 根据给定的题目句柄返回 IProblemUrlResolver 原型对象。
        /// </summary>
        /// <param name="handle">题目句柄。</param>
        /// <returns>题目 URL 解析器原型对象。若工厂类中没有注册对应的原型对象,返回 null。</returns>
        /// <exception cref="ArgumentNullException"/>
        public static IProblemUrlResolver GetUrlResolverFor(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            OJSystem oj = ProblemOriginResolver.Resolve(handle);

            if (ms_prototypes.ContainsKey(oj))
            {
                return(ms_prototypes[oj]);
            }
            else
            {
                return(null);
            }
        }
        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 Environment(ProblemEnvironmentModel model)
        {
            // 检查操作权限。
            if (!UserSession.IsAuthorized(Session) ||
                !UserAuthorization.CheckAccessRights(UserGroup.Administrators, UserSession.GetUserGroup(Session)))
            {
                return(Redirect("~/Error/AccessDenied"));
            }

            if (!TryValidateModel(model))
            {
                if (ModelState["TimeLimit"] != null && ModelState["TimeLimit"].Errors.Count > 0)
                {
                    ViewBag.TimeLimitErrorMessage = ModelState["TimeLimit"].Errors[0].ErrorMessage;
                }
                if (ModelState["MemoryLimit"] != null && ModelState["MemoryLimit"].Errors.Count > 0)
                {
                    ViewBag.MemoryLimitErrorMessage = ModelState["MemoryLimit"].Errors[0].ErrorMessage;
                }
                return(View(model));
            }
            if (string.IsNullOrEmpty(Request.Form["ProblemId"]))
            {
                return(Redirect("~/Archieve"));
            }

            // 更新数据库数据。
            ProblemHandle handle = ProblemArchieveManager.Default.GetProblemById(model.ProblemId);

            if (handle == null)
            {
                return(Redirect("~/Error/ProblemNotExist"));
            }

            using (ProblemDataProvider data = ProblemDataProvider.Create(handle, false))
            {
                data.TimeLimit      = model.TimeLimit;
                data.MemoryLimit    = model.MemoryLimit;
                data.IsSpecialJudge = model.UseSpecialJudge;
            }

            return(Redirect(string.Format("~/Archieve/ShowProblem?id={0}", model.ProblemId)));
        }
        /// <summary>
        /// 从给定的题目句柄创建 ProblemEnvironmentModel 数据对象。
        /// </summary>
        /// <param name="handle">题目句柄。</param>
        /// <returns>从给定题目句柄创建的 ProblemEnvironmentModel 对象。</returns>
        /// <exception cref="ArgumentNullException"/>
        public static ProblemEnvironmentModel FromProblemHandle(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            ProblemEnvironmentModel model = new ProblemEnvironmentModel();

            using (ProblemDataProvider data = ProblemDataProvider.Create(handle, true))
            {
                model.ProblemId       = data.ProblemId;
                model.Title           = data.Title;
                model.TimeLimit       = data.TimeLimit;
                model.MemoryLimit     = data.MemoryLimit;
                model.UseSpecialJudge = data.IsSpecialJudge;
            }

            return(model);
        }
        /// <summary>
        /// 从给定的题目句柄创建 ProblemInfoModel 对象。
        /// </summary>
        /// <param name="handle">题目句柄。</param>
        /// <returns>从给定的题目句柄创建的 ProblemInfoModel 对象。</returns>
        /// <exception cref="ArgumentNullException"/>
        public static ProblemBriefModel FromProblemHandle(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            using (ProblemDataProvider data = ProblemDataProvider.Create(handle, true))
            {
                return(new ProblemBriefModel()
                {
                    ProblemId = handle.ProblemId,
                    Title = data.Title,
                    Categories = data.GetCategories(),
                    TotalSubmissions = data.TotalSubmissions,
                    TotalAccepted = data.AcceptedSubmissions,
                    AuthorizationGroup = data.AuthorizationGroup,
                });
            }
        }
        /// <summary>
        /// 将当前对象中的数据写入给定的题目中。
        /// </summary>
        /// <param name="handle">题目句柄。</param>
        /// <exception cref="ArgumentNullException"/>
        public void SaveTo(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            using (ProblemDataProvider data = ProblemDataProvider.Create(handle, false))
            {
                data.Title             = Title;
                data.Description       = Description;
                data.InputDescription  = InputDescription;
                data.OutputDescription = OutputDescription;
                data.InputExample      = InputExample;
                data.OutputExample     = OutputExample;
                data.Hint               = Hint;
                data.Source             = Source;
                data.Author             = Author;
                data.AuthorizationGroup = UsergroupConvert.ConvertFromString(UserGroupName);
            }
        }
Beispiel #24
0
        /// <summary>
        /// 将当前数据模型对象中的数据存入给定的题目数据提供器。
        /// </summary>
        /// <param name="data">要存入的题目数据提供器。</param>
        /// <exception cref="ArgumentNullException"/>
        /// <exception cref="InvalidOperationException"/>
        public void SaveTo(ProblemHandle handle)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            using (ProblemDataProvider data = ProblemDataProvider.Create(handle, false))
            {
                data.Title             = Title;
                data.Description       = Description;
                data.InputDescription  = InputDescription;
                data.OutputDescription = OutputDescription;
                data.InputExample      = InputExample;
                data.OutputExample     = OutputExample;
                data.Hint           = Hint;
                data.Source         = Source;
                data.Author         = Author;
                data.TimeLimit      = TimeLimit;
                data.MemoryLimit    = MemoryLimit;
                data.IsSpecialJudge = IsSpecialJudge;
            }
        }
        public string Resolve(ProblemHandle handle)
        {
            string numericId = handle.ProblemId.Substring(2);
            int    adress    = 0;

            while (numericId[adress] >= '0' && numericId[adress] <= '9')
            {
                adress++;
            }
            if (adress == 0)
            {
                throw new InvalidProblemException(handle);//不合法
            }
            string nameXu = numericId.Substring(adress);

            numericId = numericId.Substring(0, adress);
            int result;

            if (!int.TryParse(numericId, out result) || !(nameXu[0] >= 'A' && nameXu[0] <= 'Z'))
            {
                throw new InvalidProblemException(handle);//不合法
            }
            return("http://codeforces.com/problemset/problem/" + result + "/" + nameXu);
        }
        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"));
        }
 /// <summary>
 /// 使用触发异常的题目句柄初始化 ProblemAlreadyExistException 类的新实例。
 /// </summary>
 /// <param name="entry">触发此异常的题目句柄。</param>
 public ProblemAlreadyExistException(ProblemHandle entry)
     : base(entry, $"题目 \"{entry.ProblemId}\" 已经存在于数据库中。")
 {
 }
 /// <summary>
 /// 使用触发异常的题目句柄以及自定义异常消息初始化 ProblemAlreadyExistException 类的新实例。
 /// </summary>
 /// <param name="entry">触发此异常的题目句柄。</param>
 /// <param name="message">自定义异常消息。</param>
 public ProblemAlreadyExistException(ProblemHandle entry, string message)
     : base(entry, message)
 {
 }
 /// <summary>
 /// 使用给定的 ProblemEntry 对象初始化 InvalidProblemException 的新实例。
 /// </summary>
 /// <param name="entry">要使用的 ProblemEntry 对象。</param>
 public InvalidProblemException(ProblemHandle entry) : base(entry, $"编号为 {entry.ProblemId} 的题目无效。")
 {
 }
 /// <summary>
 /// 使用给定的 ProblemEntry 对象和异常消息初始化 InvalidProblemException 的新实例。
 /// </summary>
 /// <param name="entry">要使用的 ProblemEntry 对象。</param>
 /// <param name="message">产生该异常的异常消息。</param>
 public InvalidProblemException(ProblemHandle entry, string message) : base(entry, message)
 {
 }