Asp.net core mvc 未在客户端上验证动态创建的元素

Asp.net core mvc 未在客户端上验证动态创建的元素,asp.net-core-mvc,unobtrusive-validation,Asp.net Core Mvc,Unobtrusive Validation,我的web应用程序中有一个表,该表由模型填充,其中属性具有用于验证的属性: [Required(ErrorMessage = "Please enter amount!")] [DisplayFormat(NullDisplayText = "", ApplyFormatInEditMode = true)] public decimal? Amount { get; set; } 当我按Submit时,如果金额为空,则该字段将在客户端上正确验证,并显示一条错误消息 现

我的web应用程序中有一个表,该表由模型填充,其中属性具有用于验证的属性:

    [Required(ErrorMessage = "Please enter amount!")]
    [DisplayFormat(NullDisplayText = "", ApplyFormatInEditMode = true)]
    public decimal? Amount { get; set; }
当我按Submit时,如果金额为空,则该字段将在客户端上正确验证,并显示一条错误消息

现在,用户可以使用jquery向表中添加新的TRs。新记录完全模仿现有记录,例如,当我检查现有TR的金额字段时:

<input class="form-control" type="text" data-val="true" data-val-number="The field Amount must be a number." data-val-required="Please enter amount!" id="Financials_1__Amount" name="Financials[1].Amount" value="1834.09"><span class="text-danger field-validation-valid" data-valmsg-for="Financials[1].Amount" data-valmsg-replace="true"></span>

参见动态添加的TR的同一字段:

<input class="form-control" type="text" data-val="true" data-val-number="The amount must be a number." data-val-required="Please enter amount!" id="Financials_77e9f261-010a-4c7c-ae50-e3f6587a8c4e__Amount" name="Financials[77e9f261-010a-4c7c-ae50-e3f6587a8c4e].Amount" value="33"><span class="text-danger field-validation-valid" data-valmsg-for="Financials[77e9f261-010a-4c7c-ae50-e3f6587a8c4e].Amount" data-valmsg-replace="true"></span>

这些记录看起来很相似。然而,当我将required字段留空并按submit时,该值不会在客户机上验证,执行将转到控制器的action方法。但ModelState.IsValid为false。这是我的第一期

以下是行动方法:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Edit(int contractorId, ContractorDetailsDto dto)
    {
        if (ModelState.IsValid)
        {
  ...
        }

        return View(_contractorRepository.GetContractorDetailsViewModelByDto(dto));
    }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务编辑(int contractorId、contractorDetailsTo dto)
{
if(ModelState.IsValid)
{
...
}
返回视图(_contractorRepository.GetContractorDetailsViewModelByDto(dto));
}
由于我们的ModelState无效,将加载相同的视图。该错误显示在验证摘要中,但不显示在具有无效值的字段下。这是第二个问题

我认为:

@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
@节脚本{
}

如何找到问题的原因?

回答您的主要问题。在添加新行后,是否可以尝试执行下一个javascript代码

function refreshValidators(formSelector) {
    var targetForm = $(formSelector);
    targetForm.removeData('validator');
    targetForm.removeData('unobtrusiveValidation');
    targetForm.removeAttr('novalidate');
    $.validator.unobtrusive.parse(targetForm);
}
关于你的第二个问题,我认为你应该为它创建单独的问题,因为它与你的主要问题无关。您需要找到在ASP.NET Core中添加新行的正确方法。对于ASP.NETMVC,我们有了下一个解决方案,即如何解决此任务。在谷歌搜索了
BeginCollectionItem
之后,我找到了core analog,但它很旧,我没有亲自使用它