2010-07-07 64 views
0

我有一個asp.net下拉列表,其中有一些項目,用戶可以鍵入一些文本到一個asp.net文本框和JavaScript將過濾數據在下拉列表中。這一切都完美運作,直到用戶輸入不匹配任何項目的文本。當發生這種情況時,我在javascript中創建了一個新的選項,其中「no XXX found」的值爲「0」。用戶點擊一個asp.net按鈕和頁面錯誤。ASP.NET下拉列表按JavaScript過濾+按鈕回發錯誤

錯誤消息我得到的是:

無效的回發或回調參數。使用配置中的<pages enableEventValidation="true"/>或頁面中的<%@ Page EnableEventValidation="true" %>可啓用事件驗證。爲了安全起見,此功能驗證回發或回調事件的參數來自最初呈現它們的服務器控件。如果數據有效且預期,請使用ClientScriptManager.RegisterForEventValidation方法爲註冊回發或回調數據進行驗證。

將此設置爲true什麼都不做,我無法弄清楚爲什麼頁面會在回發中崩潰。

任何想法?

回答

1

設置EnableEventValidation="false"將解決問題,但打開安全漏洞的頁面。

要解決這個問題而不引起安全漏洞,請致電ClientScriptManager.RegisterForEventValidation。有關更多詳細信息,請向我們顯示您的代碼。

0

嘗試所有這一切,但沒有運氣瞎搞,這裏有一個減少我的代碼版本:

List<ListItem> items = new List<ListItem>(); 
items.Add(new ListItem("abc", "1"); 
items.Add(new ListItem("xyz", "1"); 

foreach (ListItem item in items) 
{ 
    ddlCompanies.Items.Add(item); 
} 

的Javascript上textboxs onkeyup事件:

function filter() { 
    var pattern = document.getElementById('<%= tbFilterText.ClientID %>').value; 
    var dropDownList = document.getElementById('<%= ddlCompanies.ClientID %>'); 

    if (pattern != null && dropDownList != null) { 

     /* 
     * Check if the dropdown list has been backed up before 
     */ 
     if (!dropDownList.bak) { 
      /* 
      * Backup the current items in the dropdown list 
      */ 
      dropDownList.bak = new Array(); 
      for (n = 0; n < dropDownList.length; n++) { 
       dropDownList.bak[dropDownList.bak.length] 
= new Array(dropDownList[n].value, dropDownList[n].text); 
      } 
     } 

     /* 
     * Loop through the backed up dropdown list and find matches 
     * for the pattern text. 
     */ 
     matches = new Array(); 
     for (n = 0; n < dropDownList.bak.length; n++) { 
      if (dropDownList.bak[n][1].toLowerCase().indexOf(pattern.toLowerCase()) != -1) { 
       matches[matches.length] = new Array(dropDownList.bak[n][0], dropDownList.bak[n][1]); 
      } 
     } 

     dropDownList.options.length = 0; 

     //Add the matched items to the dropDownList 
     for (n = 0; n < matches.length; n++) { 
      dropDownList.options[n] = new Option(matches[n][1], matches[n][0]); 
     } 

     // If no companies could be found then display a placeholder option 
     if (dropDownList.options.length == 0) { 
      dropDownList.options[0] = new Option(document.getElementById('Nothing found').value, "-1"); 
     } 

     dropDownList.selectedIndex = 0; 
    } 
} 

然後點擊一個按鈕這應該導致回發導致錯誤