【问题标题】:Dropdown.SelectedIndex doesnt have the correct value in the Page_Load event, but has the correct value in the Render eventDropdown.SelectedIndex 在 Page_Load 事件中没有正确的值,但在 Render 事件中有正确的值
【发布时间】:2010-12-02 04:18:11
【问题描述】:

我在用户控件中有一个 aspnet 下拉列表。这个用户控件被加载到 web 表单中。此页面上也有一个提交按钮。在回发时 selectedItem 不会在 Page_load 处理程序中显示正确的值,但会在预渲染和渲染处理程序中显示正确的值。我的印象是视图状态是在 page_load 之前设置的。

【问题讨论】:

  • “正确的价值”是什么意思——是用户的选择还是什么?也许你可以提供一些源代码?我的印象是您正在处理一些非标准场景。
  • 用户选择。问题是当我在新项目中创建新页面时它可以工作。我想我只是在寻找可能导致这种情况的一些提示。我很难包含整个源代码,因为有很多继承发生,但我确信没有任何挂钩到页面/控制事件来破坏视图状态。

标签: c# asp.net


【解决方案1】:

您可能正在重新对 pre_render 和 page_load 之间的下拉列表进行数据绑定。就像事件所说的那样,pre_render 允许您在页面上的任何控件被渲染之前做一些事情。因此,一旦您的页面被渲染(在 page_load 之前),它就会对您的下拉列表进行数据绑定并删除您选择的值。

解决此问题的最简单方法是仅在需要绑定时在代码中对下拉列表进行数据绑定,例如在页面首次加载时而不是在回发时。

if (!IsPostBack)
{
    //Do all of your data binding here
    DataBind();
}

【讨论】:

【解决方案2】:

这是最值得推荐的解决方案。 关键在于正确理解页面生命周期!! 下拉列表等回发控件恢复其发布状态(发布的下拉列表的选定项)。它忘记了它的选定值,因为您在 Page_Load 事件中重新绑定它,这是在下拉列表加载了发布值之后(因为在 Page_Init 事件之后和 Page_Load 事件之前加载了视图状态)。并且在 Page_Load 事件中的重新绑定中,下拉列表忘记了其恢复的选定项。最好的解决方案是在 Page_Init 事件而不是 Page_Load 事件中执行数据绑定。

执行以下操作...

假设下拉列表名称是 lstStates。

protected void Page_Init(object sender, EventArgs e)
{
   lstStates.DataSource = QueryDatabase(); //Just an example.
   lstStates.DataTextField = "StateName";    
   lstStates.DataValueField = "StateCode"; 
   lstStates.DataBind();
}

ASP.NET在Page_Init事件之后和Page_Load事件之前加载控件的View State,所以Drop Down List的selectedIndex不会受到影响,你会神奇的得到想要的结果!!

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多