【发布时间】:2013-12-17 20:49:26
【问题描述】:
我有一个这样的 asp ddl 设置:
<asp:DropDownList ID="attendeeList2" runat="server" AutoPostBack="true" CssClass="tripRegistrationItem" />
c#:
private void attendeeList2_SelectedIndexChanged(object sender, EventArgs e)
{
_mission = new Mission(Int32.Parse(tripList.SelectedValue));
person = new Person(int.Parse(attendeeList2.SelectedValue));
attendeeLabel.Text = person.FullName.ToString();
ClearInputs(tripRegistrationWizard.WizardSteps[1].Controls);
LoadAttributes();
SetInfo();
}
和:
private void InitializeComponent()
{
attendeeList.SelectedIndexChanged += new EventHandler(attendeeList_SelectedIndexChanged);
attendeeList2.SelectedIndexChanged += new EventHandler(attendeeList2_SelectedIndexChanged);
}
我遇到的是attendeeList2_SelectedIndexChanged 确实会在 DDL 的选定项发生更改时触发,并且方法中的代码被执行,但是没有引发 Page_Load、Page_Init、Page_PreRender...。几乎就像它没有执行真正的 PostBack,但它正在运行代码。我需要在 OnChange 事件中的 Page_PreRender 中做一些事情,但不知道如何完成。
有人可以向我解释我做错了什么吗?
谢谢!
编辑:
这里是调用InitializeComponent()的代码:
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
编辑 2: 我刚刚意识到我正在使用的客户端控件位于更新面板中。看来,当控件在更新面板中时,它只是进行 AJAX 刷新,从不提高 Page_Load、Page_Init ... 一旦我将控件从更新面板中拉出,它现在会触发一个完整的回发,正如我所期望的那样.不知道为什么我在四处搜索时找不到这些信息,但现在我知道了。
【问题讨论】:
-
你从哪里调用 InitializeComponent()?为什么要从后面的代码而不是直接在 .aspx 页面中设置事件处理程序?
-
@msm8bball - 我编辑帖子现在包括对 InitializeComponent() 的调用。至于从代码隐藏而不是 .ascx 设置处理程序,我不能说,因为我不是代码的原始作者。这是一个有效的用户控件,我被要求添加一些功能。我试图限制任何代码隐藏“重新设计”,尽管我可以在需要的地方..
-
在
InitializeComponent之前尝试base.Init -
@Grundy - 尝试按照您的建议交换订单。没有区别
-
你会尝试这个吗?
<asp:DropDownList ID="attendeeList2" runat="server" AutoPostBack="true" CssClass="tripRegistrationItem" OnSelectedIndexChanged="attendeeList2_SelectedIndexChanged" />不尝试从后面的代码设置事件处理程序?看看这是否有所作为。它至少应该使代码更干净,即使它不能解决您的问题。
标签: c# asp.net postback autopostback