2011-06-29 78 views
1

請注意,我找到了解決我的問題的方法。請看下面。Selectedvalue方法返回空字符串

我正在將衆多程序從foxpro/foxweb/javascript轉換爲asp.net/vb/sql服務器。

我正在編寫一個目前通過js控制的下拉列表。

我不喜歡用這種特殊的方式使用控件,但我想保持對客戶的外觀和感覺。

通過Page_Load()在後面的代碼中使用一些值初始化控件。這工作。

在的SelectedIndexChanged()我執行

dim s as string 
s = ddl.SelectedValue 
textbox1.text = s ' this line just for debugging. 

(我接下來要清除DDL和基於S的值不同的物品重新填充它 - 我不喜歡這個功能,但我想讓事物與舊系統具有相同的外觀和感覺)重要的 - 在我用ddl改變任何東西之前,我已經獲得了s的價值。 (實際上,爲了調試的目的,我已經將其餘的dang代碼註釋掉了。)

問題是selectedvalue總是返回一個空字符串,而不是我用New Listitem(「x」 ,「x值」)。當我使用asynchpostbacktrigger時,是否有一些特殊的技巧來獲取值?


感謝您的回答。我發現我的問題是什麼 - 這不是我想的。我沒有意識到autoupdate會實現一個page_load()命令。 (這對我來說很奇怪,因爲出於某種原因,我認爲使用面板更新的原因是它不必重新加載整個頁面。我猜page_load()會在頁面的任何部分加載時觸發嗎?不抱怨 - 只是想知道)

無論如何,我在另一篇文章中發現了一個名爲ispostback()的函數的引用。在我的Page_Load中的代碼,我說,

如果沒有的IsPostBack()然後初始化

它現在。

我是在這裏看到前面提到:DropDownList的不回傳上的SelectedIndexChanged

但當時我沒看到的相關性,我在做什麼 - 沒有提及page_upload()。無論如何,我不知道如何關閉這一點,但我想我應該給我的解決方案,下面下面。這些值有點愚蠢,因爲我試圖避免發佈我的生產代碼。

在前面的代碼中,形式標籤後,我把:

然後在後面的前面代碼,我把對象:

在代碼後面,我有幾件s:

Protected Sub initialize() 

    ddlAssign.Items.Clear() 
    ddlAssign.Items.Add(New ListItem("SELECT A CATEGORY", "")) 
    ddlAssign.Items.Add(New ListItem("option 1", "combo1")) 
    ddlAssign.Items.Add(New ListItem("option 2", "combo2")) 
    ddlAssign.Items.Add(New ListItem("option 3", "combo3")) 
    ddlAssign.SelectedIndex = 0 

End Sub 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
If Not IsPostBack Then 
    initialize() 
End If 

End Sub 

Protected Sub set_next_menu() 

    ddlAssign.Items.Clear() 
    ddlAssign.Items.Add(New ListItem("menu 2", "2")) 
    ddlAssign.Items.Add(New ListItem("menu 3", "3")) 
    ddlAssign.Items.Add(New ListItem("menu 4", "4")) 
    ddlAssign.Items.Add(New ListItem("menu 5", "5")) 
    ddlAssign.SelectedIndex = 0 

End Sub 

Protected Sub ddlAssign_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlAssign.SelectedIndexChanged Dim s As String 

    s = ddlAssign.SelectedValue 

    if s = "" then 
    initialize 
    end if 
if s = "combo1" then 
    set_next_menu 
end if 

end sub 

希望我有更好的描述和視頻來展示我在做什麼。 (正如我在OP中寫的,我不推薦這種技術,但這是用戶在這種情況下所期望的)。再次感謝。

回答

0

此問題的答案發布在初始文章的末尾。我不確定我喜歡答案,但它對我有用。

0

我相信在上面的場景中,你沒有第二次選擇任何東西,因此SelectedValue將爲null。當您重新填充數據時,您也可以將selectedindex設置爲0,因此在理論上「選擇」和項目,這可能會有所幫助。

1

在JS中操作的值無法在服務器端檢索。您可以將SelectedValue置於Hidden field中,然後您將能夠從服務器端獲取Hidden Field

+0

我完全刪除了JS代碼,並嘗試用VB中的代碼替換它。 – elbillaf