我的web应用程序中有一个表,它是从模型填充的,其中的属性具有用于验证的属性:
    [Required(ErrorMessage = "Please enter amount!")]
    [DisplayFormat(NullDisplayText = "", ApplyFormatInEditMode = true)]
    public decimal? Amount { get; set; }当我按下Submit时,该字段在客户机上得到了正确的验证,如果金额为空,则会显示一条错误消息。
现在,用户可以使用jquery将新TR添加到表中。新记录完全模仿现有记录,例如,当我检查现有TR的Amount字段时:
<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是假的。这是我的第一期。
下面是action方法:
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Edit(int contractorId, ContractorDetailsDto dto)
    {
        if (ModelState.IsValid)
        {
  ...
        }
        return View(_contractorRepository.GetContractorDetailsViewModelByDto(dto));
    }因为我们的ModelState是无效的,所以加载相同的视图。此时,错误将显示在验证摘要中,但不会显示在包含无效值的字段下。这是第二个问题。
我的观点是:
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}我如何才能找到问题的原因?
发布于 2019-09-19 00:24:17
回答你的主要问题。添加新行后,是否可以尝试执行下一个javascript代码
function refreshValidators(formSelector) {
    var targetForm = $(formSelector);
    targetForm.removeData('validator');
    targetForm.removeData('unobtrusiveValidation');
    targetForm.removeAttr('novalidate');
    $.validator.unobtrusive.parse(targetForm);
}关于你的第二个问题,我认为你应该为它创建单独的问题,因为它与你的主要问题无关。你需要找到合适的方法在ASP.NET核心中添加新的行。对于ASP.NET MVC,我们有了下一个解决方案,如何解决这个任务http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/。用谷歌搜索BeginCollectionItem后,我找到了核心模拟solution,但它太旧了,我没有单独使用它。
https://stackoverflow.com/questions/57996441
复制相似问题