0

На моей странице 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;    
} 

Это работает до тех пор, пока пользователь пытается изменить к различным именем. Но если пользователь пытается сохранить форму без изменения имени, это имя уже будет найдено в базе данных, и проверка будет препятствовать сохранению.

Я был бы рад, если бы кто-нибудь мог указать мне на некоторые ссылки, описывающие лучший способ решить эту проблему. Несмотря на то, что это обычный сценарий, сохраняя уникальное имя пользователя, сохраняя форму отправки, я не нашел никакой информации о том, как это сделать.

ответ

1

Добавить в where условие сравнения значения DataKey FormView на имущество PersonId человека:

var items = from r in db.Persons 
      where r.Name == e.Value && r.PersonId != (Guid)PersonFormView.DataKey.Value 
      select r; 
+0

Отлично! Я попытался с помощью HiddenField внутри FormView, который сохранил PersonId. Но ваше решение намного превосходит. –

 Смежные вопросы

  • Нет связанных вопросов^_^