我在usercontrol中有一个aspnet下拉列表。此用户控件将加载到webform中。此页面上还有一个提交按钮。在回发时,selectedItem不会在Page_load处理程序中显示正确的值,但会在预呈现和呈现处理程序中显示正确的值。我认为viewstate是在page_load之前设置的。
答案 0 :(得分:1)
您可能会在pre_render和page_load之间重新绑定数据绑定列表。就像事件所说的那样,pre_render允许您在呈现页面上的任何控件之前执行操作。因此,一旦您的页面被渲染(在page_load之前),它就会对您的下拉列表进行数据绑定并删除您选择的值。
解决此问题的最简单方法是仅在需要绑定时才在代码中对下拉列表进行数据绑定,例如首次加载页面而不是回发时。
if (!IsPostBack)
{
//Do all of your data binding here
DataBind();
}
答案 1 :(得分:1)
以下是最佳推荐的解决方案。 正确理解页面生命周期!! 回滚控制如下拉列表恢复其发布状态(发布下拉列表的选定项目)。它忘记了它的选定值,因为你在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不会受到影响,您将获得理想的结果!