На моей странице 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;
}
Это работает до тех пор, пока пользователь пытается изменить к различным именем. Но если пользователь пытается сохранить форму без изменения имени, это имя уже будет найдено в базе данных, и проверка будет препятствовать сохранению.
Я был бы рад, если бы кто-нибудь мог указать мне на некоторые ссылки, описывающие лучший способ решить эту проблему. Несмотря на то, что это обычный сценарий, сохраняя уникальное имя пользователя, сохраняя форму отправки, я не нашел никакой информации о том, как это сделать.
Отлично! Я попытался с помощью HiddenField внутри FormView, который сохранил PersonId. Но ваше решение намного превосходит. –