【发布时间】:2011-11-29 13:46:32
【问题描述】:
在我的asp 页面中,我有一个FormView,用于显示和编辑一个人的信息。每个人都有一个唯一的名字,我正在使用 CustomValidator 进行验证:
<asp:FormView runat = "server"
ID = "PersonFormView"
DefaultMode = "Edit"
DataSourceID = "onePersonDs"
DataKeyNames = "PersonId">
<EditItemTemplate>
...
<asp:TextBox runat = "Server"
Id = "Name"
Text = '<%# Bind("Name") %>'/>
...
<asp:CustomValidator
ID = "UniqueNameValidator"
runat = "server"
Display = "Dynamic"
ControlToValidate = "Name"
ErrorMessage = "Person already exists!"
OnServerValidate = "UniqueNameValidator_ServerValidate" />
为此使用自定义验证器的最佳方法是什么?我的 UniqueNameValidator_ServerValidate 看起来像这样:
public void UniqueNameValidator_ServerValidate(
object sender, ServerValidateEventArgs e)
{
// Check for a duplicate.
var items = from r in db.Persons
where r.Name == e.Value
select r;
e.IsValid = items.Count() == 0;
}
只要用户尝试更改为不同的名称,此方法就会起作用。但是,如果用户尝试在不更改名称的情况下保存表单,则该名称将已在数据库中找到,并且验证将阻止保存发生。
如果有人能指出一些描述解决此问题的最佳方法的链接,我会很高兴。尽管这是一种常见的情况,在保持用户名唯一的同时仍然允许提交表单,但我还没有找到有关如何执行此操作的任何信息。
【问题讨论】:
标签: asp.net validation formview unique-constraint customvalidator