我有一个webforms ASPX页面,它有一个动态添加的用户控件。用户控件有两个DropDownLists,一个在UpdatePanel中,因为它的项目取决于第一个DropDownList中的选择。
问题在于,如果不更改第一个DropDownList的值,则不会保存第二个DropDownList的值。如果你确实改变了第一个DropDownList的值,那么它可以正常工作。
这就是它的简单工作方式......
首次加载页面时,会设置先前的值。这发生在主ASPX页面Page_Load事件中,其中动态添加用户控件并通过用户控件的属性设置初始值。该属性设置第一个DropDownList的选定值,触发SelectedIndexChanged事件,该事件使用基于第一个DropDownList选择的选项填充第二个DropDownList中的项,然后选择第二个DropDownList的先前值。
然后在主ASPX页面中,在PreLoad事件中的帖子后面再次动态添加用户控件。
Viewstate全程启用。
我已经调试过并且在回帖后第二个DropDownList没有Items。即使在UpdatePanel部分回发期间,项目集合也是空的。但是,如果更改了第一个DropDownList,则Items集合是正确的 - 只有在问题发生的初始加载上最后一次填充第二个DropDownList时才会这样。
这里是代码的相关部分......
非常感谢任何帮助。
ASPX页面:
protected void Page_PreLoad(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
PopulateTemplateOptions();
}
}
protected void PopulateTemplateOptions(bool init = false)
{
//this is where the control is dynamically added
//If not post back then initial values are set by passing values to
//user control's TemplateOptions property
}
用户控制:
public string TemplateOptions
{
set
{
//this is where the initial values are set
}
}
protected void ddlEnquirySubjectDefault_SelectedIndexChanged(object sender, EventArgs e)
{
//this is where items are added to the second drop down list based on the selection in the first one.
}
(这些是唯一相关的部分,但我还没有包含的另外7,000行代码。)
答案 0 :(得分:0)
以下是我的两个想法:
1)您的代码中此行可能有误:if (Page.IsPostBack)
必须是if (!Page.IsPostBack)
,虽然我从未使用Page_PreLoad
事件,所以我不确定它是否正确。
2)尝试在Page_Init
事件中执行您想要的操作。我在我的项目中使用它,没有问题。