ASP .net 回传和函数

ASP .net PostBack and Function

我正在处理网页, 我需要它在第一次加载时从 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 函数,回发如预期的那样为真,但该函数未触发(已使用调试器检查)。

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

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

当您单击一个按钮时,此单击会触发回发,并且定义 Page class 的处理程序将执行一些代码。然后将构建页面,当 Page_Load 出现时,if(!Page.IsPostBack) 中的代码将不会执行,因为 IsPostBack 属性 Page class 是 true.

这里有两个关键概念。第一个是关于 Page 生命周期,页面在每个请求中经历的事件。

第二个是 Page 不会仅在客户端第一次请求它时(或者她对页面进行完全刷新的次数,例如在 [=46= 中单击 F5) ]).

更新

Respond to button click

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

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

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

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

更新

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

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

您的控件将如下所示(在 aspx 页面上):

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

那么你的后端处理程序也应该是 public:

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, "");
}

找到问题的答案。

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