ASP .net PostBack和功能

时间:2015-02-05 21:34:25

标签: c# asp.net function ispostback

我在网页上工作, 我需要它在第一次加载时会从api获取数据。

然后我想用相同的数据从一页到另一页。

我使用了IsPostBack

Page_Load(object sender, EventArgs e)
{
        if (!Page.IsPostBack)
        {
            //First Time Load Data
            leadsList = new List<Lead>();
            var client = TVPLeads.Session.GetWebClient(Session);
            string PostId = PostId = Request.QueryString["postId"];
            PostId = "1";
            try
            {
                leadsList = API.GetPostLeads(client, PostId);
            }
            catch (Exception) { }
            page = (page == 0) ? 0 : page - 1;
            DisplayLeadsPage(leadsList, page, "");

        }

}

private void pageChoosen(object sender, EventArgs e)
{
    int page = int.Parse(((Button)sender).CommandArgument);
    DisplayLeadsPage(leadsList, page-1, "");
}

DisplayPagination(){
.
.
 Button prev = new Button{
                    ID = "page_"+i,
                    CssClass = "Pagination",
                    Text = "i",
                    CommandArgument = ""+i,
                    OnClientClick = "pageChoosen"
                };
                prev.Click += pageChoosen;

                divPagination.Controls.Add(prev);
.
.
.
}

我点击一个按钮,得到了Page_Load函数,postBack按预期为真,但函数没有触发(用调试器检查)。

  • 如果我删除了IsPostBack并且它会重新进行,那么按钮功能就会被触发。

有什么问题?如何使用它?

3 个答案:

答案 0 :(得分:1)

首次请求页面时,您的页面不会回发。 asp.net的渲染引擎创建页面并将其发送回客户端。

当您单击按钮然后单击此按钮时,我们会触发回发,并且定义Page类的处理程序将执行一些代码。然后将构建页面,当Page_Load进入场景时,if(!Page.IsPostBack)中的代码将不会被执行,因为IsPostBack的{​​{1}}属性class是Page

有两个关键概念可供考虑。第一个是关于true生命周期,页面在每个请求中经历的事件。

第二种情况是Page仅在客户首次请求时才会回发(或者她完全刷新页面的时间,例如在Chrome中点击F5)。

<强>更新

  

回复按钮点击

如果您还没有定义服务器端按钮,则应定义一个。怎么样?

在你的标记中,只需添加以下代码行:

Page

然后在设计师中双击按钮。正如您将注意到的,您将被导航到类后面的代码,并且将创建一个方法,即单击处理程序。然后在此方法的主体内部,您可以在用户单击按钮时编写应执行的命令。如果您现在返回到标记,您会注意到另一个属性已添加到名为<asp:Button id="buttonId" Text="Submit" runat="server" /> 的Button中。

<强>更新

当页面回发时,需要再次创建动态构建的按钮。否则他们就不会工作。

答案 1 :(得分:1)

尝试向控件添加事件处理程序。

你的控件看起来像这样(在aspx页面上):

<asp:button id="YourButton" runat="server" OnClick="YourButton_Click" />

然后你的后端处理程序也应该公开:

public void YourButton_Click(object sender, System.EventArgs e) {

编辑:你也可以这样做:

leadsList = new List<Lead>();

if (!Page.IsPostBack)
{
    ...
}
else
{
    page = (page == 0) ? 0 : page - 1;
    DisplayLeadsPage(leadsList, page, "");
}

答案 2 :(得分:0)

找到问题的答案。

将页面发回服务器时。 我需要重建控件否则,这些控件将为null。