2009-01-06 42 views
7

我在頁面上有兩個ASP.NET dropdownlist控件。第一次調用回到服務器並獲得一個數組,該數組返回給客戶端並用於通過javascript填充第二個下拉列表。 但是,如果我在第二個(和新填充的)下拉列表中進行選擇,然後執行回發,則第二個下拉列表的選擇和內容將丟失。這是一個問題,因爲我需要獲取選定的值並在回發後保留列表的內容。ASP.NET - 丟失通過javascript填充下拉列表的選擇

我該如何解決這個問題?我認爲這是在回傳之前的某個時候更新視圖狀態的問題?


我正在填充的控件是ASP.NET下拉列表。這裏是我用來填充它們的JavaScript。

使用代碼如下(略微削減爲了簡潔):

ASP.NET控制我填充:

< ASP:DropDownList的ID = 「ddlStateCounty」 RUNAT =「服務器「OnSelectedIndexChanged =」 ddlStateCounty_OnSelectedIndexChanged」的AutoPostBack = 「真」/ >,其獲得逗號分隔值的列表

回撥代碼:

public void RaiseCallbackEvent(string eventArgument) 
    { 
    return "1, 2, 3"; 
} 

的Javascript代碼人羣:

function ReceiveServerData(retValue) 
{ 
    var statesArray = retValue.split(','); 
    var statesList = document.getElementById('{0}'); 

    if (statesArray.length > 0 && statesList != null) 
     { 
       for (var j = 0; j < statesArray.length; j++) 
      { 
        var newOption = document.createElement('OPTION'); 
         statesList.options.add(newOption); 
      newOption.value = statesArray[j].toString().trim(); 
        newOption.innerText = statesArray[j]; 
       } 
    } 
} 
+0

你可以添加你的aspx頁面,JavaScript代碼和代碼隱藏(在3個獨立的代碼塊會很好):) – 2009-01-06 12:10:47

回答

1

我猜測, 「你是不是做事情的方式asp.net」。

對我來說,如果你的javascript修改不是本地的asp.net,那麼你填充的元素不是asp.net控件,所以你在回發中丟失它們。 asp.net確實需要模型和實際頁面之間的緊密結合。

雖然可以離開基地 - 如果你可以發佈一些代碼會有所幫助。 (JS和代碼隱藏方法)

編輯新信息:

右鍵 - 所以你基本上是通過JS創建完全正常的HTML元素的負荷僅基於一個支持Ajax返回字符串(?) ,其中asp.net代碼隱藏沒有任何概念。我不是100%確定這是沒有自己設置測試應用程序的問題,但它聽起來是正確的。

檢查Request.Forms然後 - 正如其他人所建議的 - 將是最簡單的方法來解決這個問題,但你應該記住,asp.net會越來越痛苦,你越來越偏離做事情它希望你的方式。我認爲,值得研究如何從代碼隱藏中添加這些新選項。

+0

這是太多的「asp.net」在一個職位的實例 – annakata 2009-01-06 12:08:04

+0

太多的asp.net?那可能嗎? ;) – Blounty 2009-01-06 12:13:28

1

只是使用response.forms集合來獲取選定的值。

6

您在說明您沒有ViewState權限時是正確的,這就是您將數據發回服務器時未填充值的原因。

我會強烈建議您遷移到使用Cascading Drop Down的ASP.NET AJAX控件工具包中(它既有.NET 2.0和.NET 3.5版本),因爲它確實你是什麼之後,它通過回傳進行維護。

您的其他選擇是在JavaScript填充的下拉列表中輸入一個onchange事件,然後在該列表中填充隱藏字段,因爲該事件將被髮回服務器,並且提交的值將保持在上述發佈數據,是這樣的:

$addHandler('change', $get('dynamicDDL'), function() { $get('hiddenField').value = this.options[this.selectedIndex].value; }); 

因爲我使用的MS AJAX速記添加事件等對我使用的方法更多信息演示可以在這裏找到:http://msdn.microsoft.com/en-au/library/bb397536.aspx

3

Request.Form [Control.UniqueID]爲您提供選擇ed值。

相關問題