在我的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;
}
只要用户尝试更改为不同的名称,此功能就有效。但是,如果用户尝试在不更改名称的情况下保存表单,则已在数据库中找到该名称,并且验证将阻止保存发生。
如果有人能指出一些描述解决这个问题的最佳方法的链接,我会很高兴。尽管这是一种常见的情况,在保持用户名称的同时仍然允许提交表单,但我还没有找到有关如何执行此操作的任何信息。
答案 0 :(得分:1)
添加到where
条件,将FormView的DataKey值与person的PersonId属性进行比较:
var items = from r in db.Persons
where r.Name == e.Value && r.PersonId != (Guid)PersonFormView.DataKey.Value
select r;