2013-10-11 110 views
0

我對Web開發很新,而且我遇到了以下問題,我不太明白。在VS2010中使用visual basic工作。用javascript添加項目到下拉列表並堅持回發

我有一個頁面(aspx),它有一個gridview,它有幾列,包括一個帶有tickbox和一列'action'的列,它有一個空的,隱藏的下拉列表(每行都有這個)。

每當用戶勾選一個框時,我會通過AJAX調用(這是我第一次嘗試AJAX :-))從服務器檢索一些值,並使用這些值在「操作」列中填充下拉列表選定的行。到現在爲止還挺好。

然後,用戶可以在下拉列表中進行選擇,然後按下按鈕(上傳),然後執行回發以處理信息。

但是,在後面的代碼中,我無法檢索下拉列表中添加的項目(更不用說選定的值)。我可以檢索下拉列表,但它沒有任何項目。

谷歌搜索了一段時間後,我意識到客戶端的變化不會在表單發佈到服務器時持久化,我知道 - 但它也似乎很奇怪。下拉菜單是在創建頁面時創建的,爲什麼它不存儲javascipt添加的項目?特別是因爲我發現一些解決方法使用隱藏的字段來存儲添加的項目或selectedvalue。如果我可以將它們存儲在隱藏字段中,爲什麼我不能將它們存儲在實際的下拉列表中?

我很明顯不理解網站是如何工作的......但這意味着,在頁面初始加載後,您可以更改下拉列表框和列表框等的值,但這些將永遠不可用的服務器端?

編輯:一些代碼;第一個JavaScript的代碼片段我如何通過AJAX調用添加我檢索到的不同的值:

var drop = row.findElement("ddlAction"); //find the dropdownelement in the DOM 
for (j = 0; j < dropdownitems.length; j++) { //add all the options from xml 
    option = document.createElement("option"); 
    option.text = dropdownitems[i].getAttribute("text"); 
    option.value = dropdownitems[i].getAttribute("value"); 
    drop.add(option, null); 
} 

這工作得很好,在下拉列表填充,我可以選擇。但是,當網頁被貼我做服務器代碼如下:

Dim SelCount As Integer = LocalFilesGrid.SelectedItems.Count 
If SelCount >= 0 Then 
    For Each dataItem In LocalFilesGrid.SelectedItems 
     Dim drop As DropDownList 
     drop = dataItem.FindControl("ddlAction") 
     If drop.Items.Count = 0 Then 'always zero 
      MsgBox("Nope") 
     End If 
    Next 
End If 

我希望能夠遍歷網格的選定行,得到相應的下拉列表和的SelectedValue。

+0

SOF的人會更有興趣看到'code please' :) –

回答

2

當你混合使用這些不同的技術時,你最終會遇到像這樣的麻煩。你要做的是AjaxASP.NET。選擇一個然後使用它。如果您選擇ASP.NET而不是AJAX致電使用UpdatePanel這將簡化您的生活。

如果你想Ajax填滿你的自我,然後處理按鈕點擊並通過ajax提交請求,而不是回發。

您能夠檢索下拉菜單但不是項目的原因是您必須在aspx中聲明下拉菜單,但這些項目是在客戶端添加的,因此服務器對項目沒有任何瞭解。

原因是ASP.NET使用視圖狀態,你不能搞亂視圖狀態。因此,您可以將數據添加到隱藏字段並在服務器上讀取它們,但不能將數據寫入視圖狀態。

最好的方法是使用ASP.NETUpdatePanels。如果你混在一起,那麼你將不得不在每一步都繼續做某種伎倆。如果你想更好地使用自己的Ajax東西,可以使用MVCRazor(而不是使用aspx的mvc),因爲它是用於這種用途的。

+0

嗯..我會研究UpdatePanel。 –

相關問題