【问题标题】:AutoPostBack not triggering Page_LoadAutoPostBack 未触发 Page_Load
【发布时间】: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 - 尝试按照您的建议交换订单。没有区别
  • 你会尝试这个吗? &lt;asp:DropDownList ID="attendeeList2" runat="server" AutoPostBack="true" CssClass="tripRegistrationItem" OnSelectedIndexChanged="attendeeList2_SelectedIndexChanged" /&gt; 不尝试从后面的代码设置事件处理程序?看看这是否有所作为。它至少应该使代码更干净,即使它不能解决您的问题。

标签: c# asp.net postback autopostback


【解决方案1】:

请尝试在页面指令中添加:

autoeventwireup="true"

有些喜欢:

<%@ page language="C#" autoeventwireup="true" codefile="yourpage.aspx.cs" inherits="yourclass"%>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多