剃刀页面-始终显示客户端验证错误消息

时间:2020-01-08 14:29:00

标签: c# asp.net validation razor

在我的剃须刀页面应用程序中,我有一个用于输入数量的字段。为确保用户不能输入0以下或99,999以上的值,我已经进行了验证。验证有效。问题是即使值通过验证,表单提交时也会显示错误消息。第一次加载页面时,仅在提交表单时,它不会显示。如果错误进一步出现(此功能无关的功能),并且错误消息显示不正确,则会重新加载页面。如果更改了该值,该错误消息就会消失,但是当错误消息不应该出现时,错误消息仍然会导致用户错误地认为该错误至少部分是由于数量引起的(实际上,这没有什么不妥)。 / p>

<td class="col-4">
   <input type="text" class="form-control mb-2 mr-sm-2" asp-for="PartInfo" value="@part.QUANTITY" id="@part.QUANTITY" name="PartInfo" onchange="HighlightField(this)" />
   <span class="text-danger" asp-validation-for="PartInfo"></span>
</td>
[DisplayName("Quantity"), BindProperty, Required]
[Range(1, 99999, ErrorMessage = "Please enter a number between 1 and 99,999.")]
public List<int> PartInfo { get; set; }

This link shows the input field on the page with the error message.

感谢您的帮助!非常感谢!

编辑:忘记包括:我确实在寻找这个答案,但是我发现的所有实例都是ASP MVC而不是Razor Pages发生的实例。该解决方案在这里不起作用。

编辑#2:也许这会帮助我提到这一点,并且在显示错误消息时我遇到了完全相同的问题。它还有其他问题,这就是为什么我更改了它。

[DisplayName("Quantity"), BindProperty, Required, MaxLength(5)]
[RegularExpression(@"^\\d+$", ErrorMessage = "The quantity must be a number.")]
public List<int> PartInfo { get; set; }

1 个答案:

答案 0 :(得分:0)

我解决了自己的问题。要说我所做的,我需要提供的信息比我上面提供的要多。 PartInfo是一个数组,其中包含每个零件的零件ID,零件编号和数量,我使用foreach循环遍历该数组以创建每个零件的输入字段。 无论如何,我必须为PartInfo的每个元素(零件ID,零件编号和数量)创建单独的属性,然后将name属性更改为指向这些属性。

[DisplayName("Part ID"), BindProperty, Required]
[Range(1, 999999999, ErrorMessage = "Please enter a number between 1 and 999,999,999.")]
public int PartID { get; set; }

[DisplayName("Part Number"), BindProperty, Required]
[StringLength(48, ErrorMessage = "Please enter a part number.")]
public string PartNumber { get; set; }

[DisplayName("Quantity"), BindProperty, Required]
[Range(1, 99999, ErrorMessage = "Please enter a number between 1 and 99,999.")]
public int Quantity { get; set; }
 @foreach (var part in Model.PartInfoList)
            {
            <tr class="row table-bordered">
                <td class="col-4">
                    <input type="text" class="form-control mb-2 mr-sm-2" asp-for="PartInfo" value="@part.PART_ID" id="@part.PART_ID" **name="PartID"** onchange="HighlightField(this)" />
                    <span class="text-danger" asp-validation-for="PartID"></span>
                </td>
                <td class="col-4">
                    <input type="text" class="form-control mb-2 mr-sm-2" asp-for="PartInfo" value="@part.PART_NUMBER" id="@part.PART_NUMBER" **name="PartNumber"** onchange="HighlightField(this)" />
                    <span class="text-danger" asp-validation-for="PartNumber"></span>
                </td> 
                <td class="col-4">
                    <input type="text" class="form-control mb-2 mr-sm-2" asp-for="PartInfo" value="@part.QUANTITY" id="@part.QUANTITY" **name="Quantity"** onchange="HighlightField(this)" />
                    @*The id here is used to determine if the field should be highlighted or not.*@
                    <span class="text-danger" asp-validation-for="Quantity"></span>
                </td>
            </tr>
            }

我偶然解决了。当那件事发生时一定会喜欢它。