2012-09-10 117 views
1

我的頁面上有一個由幾個ListEditItem對象組成的動態生成的ASPxComboBox。我可能有這樣的事情作爲ASPxComboBox源:通過jQuery獲取DevExpress ASPxComboBox的價值

foreach (KeyValuePair<string, int> row in list) 
{ 
    ListEditItem item = new ListEditItem(row.Key.ToString(), 
     row.Value.ToString()); 
    ddl.Items.Add(item); 
} 

在這個例子中,row.Value包含的值,例如「1431,5415,12897,3491」等(即隨機數據庫ID值)。在調試模式下逐步執行此代碼將驗證ListEditItems是否添加了正確的值。但是,當我做了查看源文件上生成的HTML,輸出看起來是這樣的:

<option value="1">4DAES</option> 
<option value="2">631</option> 
<option value="3">ACB</option> 
<option value="4">ABDHP</option> 

我希望它看起來代替,像這樣(注意選項值的變化對應於數據庫ID的我上述:)

<option value="1431">4DAES</option> 
<option value="5415">631</option> 
<option value="12897">ACB</option> 
<option value="3491">ABDHP</option> 

我的問題提供的是這樣的:

使用jQuery,我怎麼可以得到我要找的ID的實際價值?我看到了兩種可能的選擇:

1)ASPxComboBox控件上是否存在一個設置,告訴它呈現正確的值而不是遞增的ID?

2)是否有客戶端方法可以調用控件來爲我獲取該信息?如果是這樣,你能提供一個例子嗎?

+0

如果不是創建一個新的ListEditItem,而是使用Add()的替代語法來直接添加該項目,例如'dd1.Items.Add(row.Key.ToString(),row.Value.ToString( ));'? – AndrewR

+0

同樣的結果很不幸... – Scott

+0

我不知道它爲什麼這樣做,但我有更多的想法。 :)你沒有把'ASPxComboBox.ValueType'改成與'System.String'不同的值嗎?你沒有在ASPxComboBox上設置任何綁定嗎? (文檔中說,如果綁定已設置,則忽略這些項。)您的選項#2不起作用,因爲客戶端代碼只能提取頁面上已有的數據(通過某種Ajax請求獲取數據,這不應該是需要的。) – AndrewR

回答

1

我想出了答案:

var clientInstanceName = this.data('clientinstancename'); 
var combo = ASPxClientControl.GetControlCollection().GetByName(clientInstanceName); 
return combo.GetSelectedItem().value; 

的ASPxComboBox控制具有「ClientInstanceName」屬性,使您可以指定一個名稱此對象,你可以操縱它的客戶端。由於我動態創建這些控件,我不知道名字的時間提前,所以我將它添加爲「數據 - 」屬性,像這樣:

ddl.ClientInstanceName = fld.FieldName; 
ddl.Attributes.Add("data-clientinstancename", fld.FieldName); 

底線是,定義一個ClientInstanceName屬性控制,然後使用第一個代碼片段中的代碼來獲取所需的值。

+2

或者使用'window [clientInstanceName]'代替'ASPxClientControl.GetControlCollection()。GetByName'。 – Filip

+0

曾經搞清楚爲什麼ID不符合你的要求?例如,0,1,2,3而不是數據庫id?我有同樣的問題。 – dferraro