如何编写只运行一次的代码

本文关键字:一次 代码 何编写 运行 | 更新日期: 2023-09-27 18:02:57

基本上,我有一个包含两个表单的页面,它们都使用相同的代码来验证数据:

public ActionResult DoValCheck(ValidationCheckObject aValCheckHelper)
    {
        var recID = int.Parse(aValCheckHelper.RecordID);
        var hicnExists = UnitOfWork.McaUniqueRecordRepository.FindBy(m => m.HICN == aValCheckHelper.HICN);
        var ssnExists = UnitOfWork.McaUniqueRecordRepository.FindBy(m => m.Injured_Party.SSN == aValCheckHelper.SSN);
        if ((UnitOfWork.McaUniqueRecordRepository.FindBy(m => m.Record_ID == recID && m.HICN == aValCheckHelper.HICN).Any()) ||
             UnitOfWork.McaUniqueRecordRepository.FindBy(m => m.Record_ID == recID && m.Injured_Party.SSN == aValCheckHelper.SSN).Any())
        {
            return Json(false);
        }
        if (hicnExists.Any())
        {
            return Json(new { Success = hicnExists.Any(), RecordID = (hicnExists.Any() ? hicnExists.First().Record_ID : -1) });
        }
        if (ssnExists.Any())
        {
            return Json(new { Success = ssnExists.Any(), RecordID = (ssnExists.Any() ? ssnExists.First().Record_ID : -1) });
        }
        else
        {
            return Json(false);
        }
    }

现在的问题是,这段代码被设置为在条件为真时运行…所以只要hicnExists.Any()为真,这段代码就会运行(这段代码在我的JavaScript中被调用,但我宁愿一次处理一段)。也就是说,只要hcn文本域中有代码,hicnExists.Any()就为真。

我怎么做才能只允许这个代码运行一次?

如何编写只运行一次的代码

使hicnExists为可空的静态类级变量。当函数被调用时,测试它是否为null。如果它为空,则运行查询并设置该值。一旦设置了该值,查询将不会在当前事务的剩余时间内再次运行。

如果您想在事务之间缓存结果,那么我建议设置会话cookie或使用服务器端会话变量。