我已经对此进行了研究,并考虑了如何做其中的一部分,但不太明白如何将它们组合在一起。当有人在我的应用程序中创建新记录时,如果
InvestigationLog.CourtType
下拉列表的结果是“转入 (F)”或“转入 (M)”,那么我需要填写一个文本字段,InvestigationLog.TCaseNo
带有案例编号,但仅当它是这两个选择之一时。 (除了这两个还有其他选择。)
案件编号需要采用
T(then F or M depending upon the 2 choices above)-###-YY
的格式。例如,TF-001-24
将是 2024 年的第一个 F 案例。
我当前该字段的 .cshtml 是:
<td style="width: 25%">
<div class="mb-3">
<label asp-for="InvestigationLog.TCaseNo"></label>
<input asp-for="InvestigationLog.TCaseNo" id="TCaseNumber" type="text" class="form-control" readonly="readonly" />
</div>
</td>
Investigation.CourtType 字段的 .cshtml 为:
<td style="width: 25%">
<div class="mb-3">
<label asp-for="InvestigationLog.CourtType"></label>
<select asp-for="InvestigationLog.CourtType" id="SelectCourtType" class="form-select" asp-items="@(new SelectList(Model.DisplayCourtTypeData.OrderBy(x => x.CourtTypeDesc),"CourtTypeDesc", "CourtTypeDesc"))" onchange="assignCaseNo" ><option value="" selected disabled>---Select Court Type---</option></select>
</div>
</td>
我希望一旦有人从
TCaseNo
下拉列表中跳出,即可填充此 InvestigationLog.CourtType
。如果他们返回(在提交和绑定记录之前)更改 CourtType
下拉列表的值,我希望它相应地更改。
在我的研究中,我想出了这个来增加“F”和“M”
TCaseNo
:
var year = DateTime.Now.Year;
int incFCaseNo=0;
"F" + String.Format("{0:000}", incNumber, year);
incNumber++;
int incMCaseNo=0;
"M" + String.Format("{0:000}", incNumber, year);
incNumber++;
我的问题是如何将其放入
<input asp-for="InvestigationLog.TCaseNo"...>
?
假设我需要在 JavaScript 函数中为 allocateCaseNo 编写类似这样的 if 语句。只是不知道足够的 Javascript 来正确地执行此操作。这是我可怜的尝试:
<script type="text/javascript">
function assignData() {
const courtTypeChoice = courtType[$("#SelectCourtType").val()];
$("#CourtType").val(courtTypeChoice).trigger('input');
}
function updateTCaseNumber('#TCaseNumber') {
if ('#SelectCourtType').val() = "Transfer In (F)"
{
var year = DateTime.Now.Year;
int incFCaseNo = 0;
"F" + String.Format("{0:000}", incNumber, year);
incNumber++;
}
else if('#SelectCourtType').val() = "Transfer In (M)"
{
var year = DateTime.Now.Year;
int incMCaseNo = 0;
"M" + String.Format("{0:000}", incNumber, year);
incNumber++;
}
else
{
null
}
$(document).ready(function () {
$('#SelectCourtType').on('input', updateTCaseNumber);
});
}
</script>
请知道,我知道这远远不正确,但我正在努力。
我也不知道事后如何处理自动生成的号码?例如,后来有人想要编辑
CourtType
,它就不再是 Transfer 类型。是否应该将 TCaseNo
释放出来以供重复使用?它会发生什么?这方面有标准做法吗?
预先感谢您对此的指导!恐怕其中大部分都超出了我的能力范围。
这是一种应该由“企业”决定的规则。这与“身份必须是一个完整的序列吗?”是同一类问题。对于数字 ID。
一般来说,如果您有一个可以根据对象的各个方面(类型/标志)和创建它的条件(日期、位置等)计算的 ID,那么这些东西需要“始终”准确地表示对象目的。否则标准就没用了。 这意味着如果这些属性之一可以在事后更改,则标准必须允许。想象一下,如果您制作了
TF-001-24
,有人对其进行了更改,使其需要为
TM-001-24
,但后来决定不再等待......这确实是一个 TF
。如果您允许原始 ID 在切换后被其他东西使用,那么您就违反了标准,因为现在您要么无法将初始大小写回 F
,要么您 可以但 ID 无法更改。在第二种情况下,你已经正式否定了可计算 ID 的目的。 在您提供的标准中,
001
不是
TF
或TM
的子集。它是一个独立的计数器。您不需要知道它是否是今年的第一个,因为从技术上讲,如果您可以在创建后更改类型,那么这是不可知的。我最喜欢的问题跟踪器使用此方案的修改版本,其中项目的短代码是前缀,数字是该项目中问题的顺序。所以
BC-123
、
IR-456
等。但是项目字段可以更改!如果我将 BC-123
从项目 BC
移至 IR
,它就会变成 IR-457
。但旧身份证怎么办?嗯,实际上它仍然映射到那个问题。因此,世界上可能存在的任何指向 BC-123
的链接仍然有效,并将带您前往 IR-457
。如果我将项目更改回 BC
,它将返回到 BC-123
的原始 ID,现在 IR-457
的任何链接都将指向那里。当涉及到计算 ID 时,必须始终有一些独特的东西,但不是全部。就您而言,每年的案件数量是独一无二的。正在制作的案件总是有顺序的,只要您不需要担心总体 ID 中的空白,就没有理由可以随时更改您可能放入 ID 中的案件的所有其他方面.
这里更重要的部分是,无论存在什么其他值,
001-24
都足以让您达到这种情况。把它想象成跟踪器中的问题。如果 ID 的一部分可以更改,旧的 ID 必须保持有效,否则任何及时冻结的引用(例如便利贴或电子邮件)都将无效。