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條件FormView的DataKey值與人的PERSONID屬性:

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

完美!我試圖用存儲PersonId的FormView中的HiddenField。但是你的解決方案要優越得多。 –

相關問題