【问题标题】:DropDownList SelectedIndex value not updating on AutoPostbackDropDownList SelectedIndex 值未在 AutoPostback 上更新
【发布时间】:2010-10-11 02:39:50
【问题描述】:

看起来像这个问题was addressed here,但他的解决方案对我不起作用。我正在创建一个动态下拉菜单系统,该系统根据第一个下拉列表中的所选项目使用查询结果填充辅助下拉列表。

第一个下拉列表被填充:

Dim db As New linqclassesDataContext
Dim categories = (From c In db.faq_cats)

NewFaqDropDownCategory.DataSource = categories
NewFaqDropDownCategory.DataTextField = "category"
NewFaqDropDownCategory.DataValueField = "category_id"
NewFaqDropDownCategory.DataBind()
Unset(categories)
Unset(db)

填充第二个下拉列表:

Protected Sub NewFaqDropDownCategory_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim temp As Integer = CInt(Val(NewFaqDropDownCategory.SelectedIndex))
    MsgBox(theDrop.SelectedValue)
    Return

    'Dim db As New linqclassesDataContext
    'Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue)

    'NewFaqDropDownList.DataSource = faqs
    'NewFaqDropDownList.DataTextField = "question"
    'NewFaqDropDownList.DataValueField = "id"
    'NewFaqDropDownList.DataBind()
    'NewFaqLabel.Visible = True
    'NewFaqDropDownList.Visible = True
    'Unset(faqs)
    'Unset(db)
End Sub

第一个下拉菜单的标记...

<asp:DropDownList ID="NewFaqDropDownCategory" AutoPostBack="true" runat="server" OnSelectedIndexChanged="NewFaqDropDownCategory_SelectedIndexChanged">
</asp:DropDownList>

第二个……

<asp:DropDownList ID="NewFaqDropDownList" runat="server" Visible="false">
</asp:DropDownList>

无论我尝试了什么,我总是得到“1”(第二个下拉列表中第一项的值)。我之前引用的帖子说这与 AutoPostBack 和服务器不知道列表已更新有关。

谁能为我再澄清一下?

【问题讨论】:

    标签: asp.net vb.net linq autopostback


    【解决方案1】:

    我认为第二个下拉框的 LINQ 查询中存在错误

    Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue)
    

    在这里,您将 SelectedValue 与类别进行比较。然而,在第一个组合框中,您说 DataValueField 应该是 category_id。尝试将 f.category 更改为 f.category_id

    【讨论】:

      【解决方案2】:

      在以下行设置断点:NewFaqDropDownCategory.DataBind() 和事件处理程序中的一个 (NewFaqDropDownCategory_SelectedIndexChanged)。 我怀疑在您的 NewFaqDropDownCategory_SelectedIndexChanged 事件触发导致您选择的值发生更改之前调用了数据绑定。

      如果是这样,您需要确保仅当您不在自动回发中间时才进行数据绑定,或者您可以将 sender 参数转换为 DropDownList,而不是在事件处理程序的第一行使用 NewFaqDropDownCategory.SelectedIndex并使用其选定的值。

      【讨论】:

      • 啊哈哈!你完全正确。我把中断放在那里,发现它确实在事件触发之前被调用了。我将 DataBind 包装在 if not page.ispostback 条件中,并且修复了它!谢谢!
      • 是的,我的童贞随着我的第一个接受的答案消失了 :)
      • 十年后仍然有用!我嵌套了动态控件,其中 DataBind 被调用了两次(一次在填充用户控件的 PlaceHolder 上,一次用于用户控件内的 PlaceHolder)。我很困惑,因为除了初始值之外的所有内容都会触发回发事件,即使在 HTML 渲染中,在我注释掉第一个更高级别的数据绑定并将较低级别的数据绑定到检查中后,也会显示正确的选择值IsPostBack。
      【解决方案3】:

      我遇到了同样的问题。发现我忘了查看我是否正在回发到页面,并且我在页面的Page_Load 事件中绑定了我的 DropDownList 控件。 我忘了使用:

      if (!IsPostBack)
      {
         .... do databind ....
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多