【问题标题】:DropDownList_OnSelectedIndexChanged event, In a UserControl is not firing on postbackDropDownList_OnSelectedIndexChanged 事件,在用户控件中未在回发时触发
【发布时间】:2010-02-21 03:08:41
【问题描述】:

我忘了提到这个 asp.net 2.0。

用户控件有一个唯一的 id,它是在 PageLoad 事件中加载的。 用户控件被加载到面板中,并且面板位于 Web 部件内部。 下拉菜单的 autopostback 设置为 true。

EnableViewState = true 在下拉列表中。 ListItems 在下拉预渲染事件方法中创建。

这就是为什么我不明白为什么它没有触发,下拉列表是唯一导致此用户控件回发的原因。

下拉的事件方法应该发生,因为用户控件在回发的页面加载方法中再次加载对吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    确保没有重新绑定下拉列表的数据源的 OnLoad 或 PageLoad 事件。使用一组新数据重新绑定数据可能会导致 clickhandler 永远无法执行。

    确保在 dropdownlist.datasource =dropdownlist.databind() 周围有 if (!Page.IsPostBack)

    【讨论】:

    • 不,创建列表项的唯一位置是下拉列表的 PreRender 方法。没有使用数据绑定,我只是在 PreRender 方法中创建新的列表项。
    • 这里的关键是不要在 PostBack 上添加新项目或重新绑定。
    • 我知道如果在页面处理中的错误点重新添加项目会清除事件,我认为下拉列表的 onSelectedChangedEvent 会触发,因为项目是在下拉列表中添加的-render 但下拉菜单在 UserControl 中,并且用户控件在 Page Load 中加载会有所不同吗?
    • PreRender 通常用于更改控件的内容。比如解析字符串、字符串编码等msdn.microsoft.com/en-us/library/ms178472.aspx就像Bryan说的,这里的关键是当你打开viewstate的时候不要在postback上重新绑定数据。不过让我担心的是“用户控件在页面加载中加载”。如果您的意思是,使用 Control.Load 从后面的代码动态加载用户控件,您必须创建自己的视图状态存储,因为默认情况下自定义用户控件不会存储在视图状态中。您可能不会遇到这种极端情况,里程会有所不同。
    • 也让我担心,因为在初始页面加载默认视图(使用 Control.Load 加载默认用户控件),然后在回发中再次使用 Control.Load 在页面加载中加载当前视图,但这是踢球者,页面中有一个树视图,当所选节点更改时会更改视图,因此 OnSelectedNodeChanged 事件使用 Control.Load 加载新的用户控件。
    【解决方案2】:

    我不确定这是否是您的问题,但这是最常见的问题。

    尝试将 EnableViewState 设置为 true 对于 DropDownList

    如果ViewState 设置为false,则在回发时selected Index 将恢复为默认值,这通常是第一个项目。如果选中第一项,则不会触发 SelectedIndexChange 事件

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2015-08-08
      • 2010-10-15
      相关资源
      最近更新 更多