我的页面上有一个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”,它们将不会停止提交页面。
我做了一个更加图解的例子。
您可以在此处显示“名称”字段为空,“位置”字段包含无效字符。验证控件显示错误,但是当我单击Update(用红色圈出)时,它们仍会通过并添加到数据库中。
如何阻止这种情况发生?
谢谢!
答案 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