對於設計良好的組件,每次更改都不需要往返服務器,客戶端應該能夠處理大多數情況,除非服務器必須必須立即驗證數據。
所有事情的反模式都需要回發或使用.NET的懶惰版本的ajax(當服務器處理像比如向項目組合添加項目這樣的微小比特)時,JavaScript並不是很好,做那些簡單的任務。
我下載了ajaxcontroltoolkit的組合框的源代碼,不幸的是我沒有提供一個好的JavaScript界面。
你可以嘗試禁用回傳,並使用類似:
<script type="text/javascript">
function addItemToDumbComboBox(cb, text)
{
/* Based upon Combobox.pre method initializeOptionList() */
// create the new list item
var child = document.createElement('li');
child.innerHTML = text;
cb.get_optionListControl().appendChild(liItem);
// add the item to the internal collection
var item = { text: text.trim(); };
Array.add(cb._optionListItems, item);
// style the ListItem with default skin
cb.initializeOptionListItem(child);
}
addItemToDumbComboBox(document.getElementById("cbCompany"), "new item #1");
addItemToDumbComboBox(document.getElementById("cbCompany"), "new item #2");
addItemToDumbComboBox(document.getElementById("cbCompany"), "new item #3");
</script>
...看看會發生什麼。注意我沒有真正測試這個代碼,這只是一個例子。
順便說一句,我建議你切換到一個合適的JavaScript接口的組合框實現。
讓服務器做好所有工作就像是買烤麪包機和每份早餐郵寄給工廠,連同2片面包,讓他們做烘烤,並將其送回給您,祝酒!這是愚蠢的,但不要責怪自己,這是一個常見的ASP.NET反模式。
希望有幫助,上帝保佑!
我試圖保持我的問題簡短,抱歉的缺乏信息。但我需要它回發到服務器。該組合最初由來自數據庫的公司名稱填充。但是,如果用戶的公司沒有列出,他們可以在框中輸入一個新的觸發我的「OnItemInserted」事件,該事件將項目添加到數據庫並重新加載組合框。我不希望它在用戶選擇不同的預先存在的值時回發。說他們首先去頁面,選擇一個已經存在的值,它會回發:( –
好吧,廢話,也許我可以按照你的方式做,但添加一個__doPostBack()!Imma試試吧.. –
I看到了,我錯過了OnItemInserted事件。讓我們看看我是否可以有任何幫助... =) – Trinidad