Razor Pages - всегда отображается сообщение об ошибке проверки на стороне клиента - PullRequest
1 голос
/ 08 января 2020

В моем приложении бритвенных страниц у меня есть поле для ввода количества. Чтобы убедиться, что пользователи не могут вводить что-либо ниже 0 или выше 99 999, у меня есть проверка на месте. Проверка работает. Проблема в том, что сообщение об ошибке отображается при отправке формы, даже если значение проходит проверку. Он не отображается при первой загрузке страницы, только при отправке формы. Страница перезагружается, если в дальнейшем происходит ошибка (функциональность не связана с этим вопросом), и это происходит, когда сообщение об ошибке отображается неправильно. Сообщение об ошибке исчезает, если я изменяю значение, но сообщение об ошибке, появляющееся, когда его не должно быть, все равно заставит пользователей ошибочно полагать, что ошибка была хотя бы частично из-за количества (когда на самом деле с ним все в порядке).

<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; }

Эта ссылка показывает поле ввода на странице с сообщением об ошибке.

Любая помощь приветствуется! Большое спасибо!

Редактировать: Забыл включить это: я искал этот ответ, но все, что я нашел, это случаи, когда это происходило с 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 голосов
/ 08 января 2020

Я решил свою проблему. Чтобы сказать, что я сделал, мне нужно предоставить немного больше информации, чем то, что я предоставил выше. PartInfo - это массив, в котором есть идентификатор детали, номер детали и количество для каждой детали в ней, и я прошел через нее, используя foreach l oop, чтобы создать поля ввода для каждой детали. В любом случае мне пришлось создать отдельные свойства для каждого элемента PartInfo (идентификатор детали, номер детали и количество) и изменить атрибут имени, чтобы указывать на эти свойства.

[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>
            }

Я решил это случайно. Должен любить, когда это произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...