我在用户控件中有一个aspnet下拉列表。此用户控件将加载到the表单中。这个页面上也有一个提交按钮。回发时,selectedItem不会在Page_load处理程序中显示正确的值,但会在预呈现处理程序和呈现处理程序中显示正确的值。我的印象是视图状态设置在page_load之前。
发布于 2010-12-02 04:58:00
您可能正在重新绑定pre_render和page_load之间的下拉列表。正如事件所说,pre_render允许您在呈现页面上的任何控件之前执行某些操作。因此,一旦您的页面呈现(在page_load之前),它就会对您的下拉列表进行数据绑定,并擦除您选择的值。
解决这个问题的最简单的方法是只在需要绑定下拉列表时才在代码中绑定它,比如第一次加载页面时,而不是在回发时。
if (!IsPostBack)
{
//Do all of your data binding here
DataBind();
}
发布于 2011-03-22 23:58:23
以下是最好的推荐解决方案。它在于正确理解页面生命周期!!像下拉列表这样的回发控件恢复它们的投递状态(下拉列表中的选定项已投递)。它忘记了它选择的值,因为您在Page_Load事件中重新绑定它,这是在下拉列表加载了POST值之后(因为View State是在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事件之前加载控件的视图状态,因此下拉列表的selectedIndex不会受到影响,您将神奇地获得所需的结果!!
https://stackoverflow.com/questions/4331625
复制相似问题