首页 > 解决方案 > 为什么我的RequiredFieldValidators 没有阻止表单发布?

问题描述

根据错误指示的“重复”,单击按钮时不会发生验证。回发不受验证行为的阻碍。当我说“该页面仍在发布”时,我认为我对此很清楚,但显然我错了。

这不应该如此混乱,但我迷路了。

我的页面上有几个RequiredFieldValidator控件,我没有在其中指定 anInitialValue因此验证器应该无法验证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);
    }
}

现在我很高兴保持原样,因为它仍然可以防止损坏的数据被发布到数据库,但它没有在 UI 上指示任何内容这一事实是我遇到的问题。

我已经根据asp.net-tutorials.com或多或少地构建了这个,但我没有任何运气让它正常工作。我错过了什么吗?为什么验证失败时页面上没有显示任何错误?

标签: c#asp.netrequiredfieldvalidator

解决方案


通过将 HTML5required属性添加到我要验证的字段来解决。无论是单独还是与已经存在的逻辑一起,表单提交现在都不会发生,并且 UI 指示该字段是必需的:

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

推荐阅读