Почему мои RequiredFieldValidators не препятствуют публикации формы? - PullRequest
1 голос
/ 20 июня 2019

Согласно ошибочно указанному «дубликату», при нажатии кнопки проверка не выполняется. Обратная передача продолжается без каких-либо препятствий при проверке поведения. Я думал, что мне ясно об этом, когда я сказал «страница все еще публикует» но, очевидно, я был неправ.

Это не должно так смущать, но я потерян.

У меня есть несколько RequiredFieldValidator элементов управления на моей странице, в которых я не указываю InitialValue, поэтому валидаторы не смогут проверить, если значение ControlToValidate пусто ( согласно документации ).

Однако, страница все еще публикуется, даже с пустыми значениями (хотя Page.IsValid в этом случае возвращает false).

<div class="form-group">
    <label class="col-md-3 control-label">Registered Name</label>
    <div class="col-md-9">
        <asp:TextBox runat="server" ID="RegisteredName" CssClass="form-control" />
        <asp:RequiredFieldValidator runat="server" ID="RegisteredNameRequiredFieldValidator" ControlToValidate="RegisteredName" ErrorMessage="*" ForeColor="Red" />
    </div>
</div>

<div class="col-md-12">
    <asp:Button runat="server" ID="Save" Text="Save" CssClass="btn btn-primary" OnClick="Save_Click" CausesValidation="true" />
</div>

Вот код бэкенда:

protected async void Save_Click(object sender, EventArgs e)
{
    try
    {
        if (Page.IsValid)
        {
            // Save the form data to the database.
            var company = await SaveCompany();
            await SaveCompanyMeta(company);
            await SaveBankingDetails(company);
            await SaveContacts(company);
            await SaveShareholders(company);

            // Indicate that the operation processed successfully.
            var msg = $"Company details for new company {company.RegisteredName} have been saved. Redirecting to company list...";
            ShowSnackbar(msg, "/Companies");
        }
    }
    catch (Exception ex)
    {
        ShowSnackbar(ex.Message);
    }
}

Теперь я более чем счастлив оставить это как есть, учитывая, что он по-прежнему предотвращает отправку поврежденных данных в базу данных, но проблема заключается в том, что это ничего не указывает на пользовательском интерфейсе. с.

Я пошел и построил это более или менее в соответствии с asp.net-tutorials.com , но мне не повезло заставить его работать правильно. Я что-то пропустил? Почему при сбое проверки не отображаются ошибки на странице?

1 Ответ

0 голосов
/ 20 июня 2019

Обошли, добавив атрибут HTML5 required в поля, которые я хочу проверить Либо сама по себе, либо вместе с уже существующей логикой, отправка формы теперь не происходит, и пользовательский интерфейс указывает, что поле является обязательным:

<asp:TextBox runat="server" ID="RegisteredName" CssClass="form-control" required />
...