0

asp 페이지에는 사람에 대한 정보를 표시하고 편집하는 데 사용되는 FormView가 있습니다.필드가 폼뷰에서 유일해야합니다.

<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" /> 

이에 대한 사용자 지정 유효성 검사기를 사용하는 가장 좋은 방법은 다음과 같습니다 각 사람은 내가 직접 CustomValidator를 사용하여 유효성을 검사하고있어 어떤 고유해야합니다 이름이? 내 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

는 사람의 PersonId 속성에 FormView의 DataKey 값을 비교 where 조건에 추가

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

완벽! 나는 PersonId를 저장 한 FormView 안에 HiddenField를 시도했다. 하지만 당신의 솔루션은 훨씬 뛰어납니다. –