自定义验证程序控件不会停止提交页面

时间:2012-11-14 23:59:57

标签: c# asp.net gridview

我的页面上有一个GridView,它在Edit模板的输入字段上有Validation控件(require和regular expression)。基本上,当我们在GridView中单击“编辑”时,我正在验证用户提交的输入。

以下是一些示例标记:

<asp:TemplateField HeaderText="Name" SortExpression="Name">
    <EditItemTemplate>
        <asp:TextBox ID="EditFacultyName" runat="server" Text='<%# Bind("Name") %>' 
            CausesValidation="True"></asp:TextBox>
        <br />
        <asp:RequiredFieldValidator ID="EditFacultyNameRequired" runat="server" 
            ControlToValidate="EditFacultyName" ErrorMessage="You must provide a name" 
            ValidationGroup="ValidateGridView" Display="Dynamic"></asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ValidationExpression="^[a-zA-Z0-9 ]*$" 
            ID="EditFacultyNameRegex" runat="server" 
            ControlToValidate="EditFacultyName" 
            ErrorMessage="Must be alphanumeric characters and spaces" Display="Dynamic" ValidationGroup="ValidateGridView"></asp:RegularExpressionValidator>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

当我将焦点丢失到input元素时,验证控件会触发,但如果我单击GridView中的“Update”,它们将不会停止提交页面。

我做了一个更加图解的例子。

enter image description here

您可以在此处显示“名称”字段为空,“位置”字段包含无效字符。验证控件显示错误,但是当我单击Update(用红色圈出)时,它们仍会通过并添加到数据库中。

如何阻止这种情况发生?

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要在服务器端代码中的update事件处理程序中检查页面的IsValid属性。除了客户端验证之外,这是一个很好的做法,因为恶意用户可以轻松绕过客户端验证。

protected void OnUpdate(object sender, EventArgs e)
{
    if(Page.IsValid)
    {
        // update data store
    }
}

http://msdn.microsoft.com/en-us/library/system.web.ui.page.isvalid(v=vs.100).aspx