我的Web应用程序中有一个表,该表是从模型填充的,其中的属性具有用于验证的属性:
[Required(ErrorMessage = "Please enter amount!")]
[DisplayFormat(NullDisplayText = "", ApplyFormatInEditMode = true)]
public decimal? Amount { get; set; }
当我按Submit(提交)时,如果该金额保留为空,则该字段将在客户端上正确验证,并显示一条错误消息。
现在,用户可以使用jquery将新的TR添加到表中。新记录完全模仿了现有记录,例如当我检查现有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>
Cf。到动态添加的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>
记录看起来非常相似。但是,当我将必填字段留空并按Submit时,该值未在客户端上验证,并且执行涉及控制器的action方法。但是那里ModelState.IsValid是错误的。这是我的第一个问题。
以下是操作方法:
[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" />
}
如何找到问题原因?
答案 0 :(得分:0)
回答您的主要问题。添加新行后,您能否尝试执行下一个JavaScript代码
function refreshValidators(formSelector) {
var targetForm = $(formSelector);
targetForm.removeData('validator');
targetForm.removeData('unobtrusiveValidation');
targetForm.removeAttr('novalidate');
$.validator.unobtrusive.parse(targetForm);
}
关于第二个问题,我认为您应该为其创建单独的问题,因为它与您的主要问题无关。您需要找到适当的方法来在ASP.NET Core中添加新行。对于ASP.NET MVC,我们有了下一个解决方案,该解决方案如何解决此任务http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/。谷歌搜索BeginCollectionItem
之后,我发现了核心类似物solution,但它已经很老了,我没有亲自使用它。