0

我正在处理一个网页,我需要它在第一次加载时会从 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 并且它会重新开始,那么按钮功能就会触发。

那有什么问题?如何正确使用?

4

3 回答 3

1

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

当你点击一个按钮然后这个点击我们触发一个回发和一个定义Page类的处理程序将执行一些代码。然后页面将被构建,当 onPage_Load进入场景时,if(!Page.IsPostBack)将不会执行其中的代码,因为类的IsPostBack属性Pagetrue.

有两个关键概念可以在那里构思。首先是关于Page生命周期,即页面在每个请求中经历的事件。

第二个是Page仅在客户端第一次请求时(或者她完全刷新页面的时间,例如在 Chrome 中单击 F5)才回发。

更新

响应按钮点击

如果您尚未定义服务器端按钮,则应定义一个。如何?

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

<asp:Button id="buttonId" Text="Submit" runat="server" />

然后在设计器中双击按钮。正如您将注意到的,您将被导航到类后面的代码,并且将创建一个方法,该方法将是单击处理程序。然后在此方法的主体中,您可以编写当用户单击您的按钮时应执行的命令。如果你现在回到你的标记,你会注意到另一个属性会被添加到带有 name 的 Button 中OnClick

更新

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

于 2015-02-05T21:41:31.527 回答
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, "");
}
于 2015-02-05T21:45:41.903 回答
0

找到了问题的答案。

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

于 2015-02-07T13:05:45.263 回答