Selectedvalue方法返回null字符串

时间:2011-06-29 15:20:03

标签: .net asp.net vb.net drop-down-menu

注意,我找到了解决问题的方法。请参阅下文。

我正在将一系列程序从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的价值。 (事实上​​,出于调试目的,我已经注释掉了其余的代码。)

问题是selectedvalue总是返回一个空字符串,而不是我用New Listitem设置的值(“x”,“value-of-x”)。当我使用asynchpostbacktrigger时,是否有一些特殊的技巧来获取值?


感谢您的回答。我发现了我的问题 - 这不是我的想法。我没有意识到autoupdate会实现一个page_load()命令。 (这对我来说似乎很奇怪,因为出于某种原因我认为使用面板更新的原因是它没有重新加载整个页面。我猜想只要页面的任何部分加载,page_load()就会触发?不抱怨 - 只是大声问道。)

无论如何,我在另一篇文章中发现了一个名为ispostback()的函数的引用。在我的page_load代码中,我说,

如果不是ispostback()则初始化

现在有效。

我之前看过它:DropDownList不会在SelectedIndexChanged上回发

但当时我没有看到与我正在做的事情的相关性 - 并且没有引用page_upload()。无论如何,我不知道如何关闭它,但我想我应该给出我的解决方案,如下所示。这些值有点愚蠢,因为我试图避免发布我的生产代码。

在前面的代码中,在表单标记之后,我把:

然后在前面的代码中,我把对象:

                                     

在后面的代码中,我有几个部分:

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中所写,我不推荐这种技术,但这是用户在这种情况下所期望的)。再次感谢。

3 个答案:

答案 0 :(得分:1)

无法在服务器端检索JS中操作的值。您可以将SelectedValue放在Hidden field中,然后您就可以从Hidden Field

在服务器端获取它

答案 1 :(得分:0)

我相信上面的场景,你第二次没有选择任何东西,因此SelectedValue将为null。当您重新填充数据时,您还可以将selectedindex设置为0,因此理论上“选择”和项目可能会有所帮助。

答案 2 :(得分:0)

这个问题的答案是在最初的帖子末尾发布的。我不确定我是否喜欢这个答案,但它对我有用。