2011-06-29 57 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