首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态创建的元素不会在客户端进行验证

动态创建的元素不会在客户端进行验证
EN

Stack Overflow用户
提问于 2019-09-18 23:39:59
回答 1查看 93关注 0票数 0

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

代码语言:javascript
运行
复制
    [Required(ErrorMessage = "Please enter amount!")]
    [DisplayFormat(NullDisplayText = "", ApplyFormatInEditMode = true)]
    public decimal? Amount { get; set; }

当我按下Submit时,该字段在客户机上得到了正确的验证,如果金额为空,则会显示一条错误消息。

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

代码语言:javascript
运行
复制
<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的相同字段:

代码语言:javascript
运行
复制
<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方法:

代码语言:javascript
运行
复制
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Edit(int contractorId, ContractorDetailsDto dto)
    {
        if (ModelState.IsValid)
        {
  ...
        }

        return View(_contractorRepository.GetContractorDetailsViewModelByDto(dto));
    }

因为我们的ModelState是无效的,所以加载相同的视图。此时,错误将显示在验证摘要中,但不会显示在包含无效值的字段下。这是第二个问题。

我的观点是:

代码语言:javascript
运行
复制
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

我如何才能找到问题的原因?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-19 00:24:17

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

代码语言: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,但它太旧了,我没有单独使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57996441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档