1

我的页面上有一个 GridView,在 Edit 模板的输入字段上有验证控件(需要和正则表达式)。基本上,当用户在 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>

当我失去对输入元素的焦点时,验证控件会触发,但如果我单击 GridView 中的“更新”,它们不会阻止页面提交。

我做了一个更形象的例子。

在此处输入图像描述

在这里,您可以看到 Name 字段为空,并且 Location 字段包含无效字符。验证控件向我显示一个错误,但是当我单击更新(以红色圈出)时,它们仍然会通过并被添加到数据库中。

我怎样才能阻止这种情况发生?

谢谢!

4

1 回答 1

2

您需要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

于 2012-11-15T01:59:00.640 回答