【问题标题】:Selectedvalue method returns null stringSelectedvalue 方法返回空字符串
【发布时间】:2011-06-29 15:20:03
【问题描述】:

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

我正在将一个包含大量程序的系统从 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 时,是否有一些特殊的技巧来获取值?


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

不管怎样,我在另一篇文章中发现了对一个名为 ispostback() 的函数的引用。在我的 page_load 代码中,我说,

如果不是 ispostback() 则初始化

现在可以了。

我之前在这里看到过它的引用:DropDownList doesn't postback on 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 中所写,我不推荐这种技术,但这是用户在这种情况下所期望的)。再次感谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我正在完全删除 JS 代码并尝试用 VB 中的代码替换。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 2023-03-30
        相关资源
        最近更新 更多