C# ASP.net回发及其功能

C# ASP.net回发及其功能,c#,asp.net,function,ispostback,C#,Asp.net,Function,Ispostback,我在做一个网页, 我需要的是,当它第一次加载时,它将从api获取数据 然后我想用相同的数据从一页转到另一页 我用了iPostback Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //First Time Load Data leadsList = new List<Lead>(); var clie

我在做一个网页, 我需要的是,当它第一次加载时,它将从api获取数据

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

我用了iPostback

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.IsPostBack)
{
//首次加载数据
leadsList=新列表();
var client=tvconceds.Session.GetWebClient(会话);
字符串PostId=PostId=Request.QueryString[“PostId”];
PostId=“1”;
尝试
{
leadsList=API.GetPostLeads(客户端,PostId);
}
捕获(异常){}
第=(第==0页)?0:第1页;
显示LeadsPage(leadsList,第页“”);
}
}
private void pageChoosen(对象发送方,事件参数e)
{
int page=int.Parse(((按钮)sender.CommandArgument);
显示LeadsPage(leadsList,第1页,“”);
}
显示分页(){
.
.
按钮prev=新按钮{
ID=“第页”+i,
CssClass=“分页”,
Text=“i”,
CommandArgument=”“+i,
OnClientClick=“pageChoosen”
};
上一次单击+=页面选择;
divPagination.Controls.Add(prev);
.
.
.
}
我点击一个按钮,进入Page_Load函数,回发正如预期的那样是真的,但函数没有启动(通过调试器检查)

  • 如果我移除iPostBack,它会重新启动,那么按钮功能将启动

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

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

当你点击一个按钮,然后点击我们触发一个回发,一个由
页面定义的处理程序将执行一些代码。然后将生成页面,当打开
page\u Load
进入场景时,如果(!page.IsPostBack)
将不会执行
中的代码,因为
page
类的
IsPostBack
属性是
true

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

第二个问题是,
页面
不会仅在客户端第一次请求时(或者在客户端完全刷新页面时,例如在Chrome中单击F5)才被发回

更新


响应按钮点击

如果尚未定义服务器端按钮,则应定义一个。怎么做

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

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

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

更新


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

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

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

编辑:您还可以执行以下操作:

leadsList = new List<Lead>();

if (!Page.IsPostBack)
{
    ...
}
else
{
    page = (page == 0) ? 0 : page - 1;
    DisplayLeadsPage(leadsList, page, "");
}
leadsList=newlist();
如果(!Page.IsPostBack)
{
...
}
其他的
{
第=(第==0页)?0:第1页;
显示LeadsPage(leadsList,第页“”);
}

找到了问题的答案

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

我不理解这个问题。您声明
IsPostBack
如预期的那样为
true
。您的条件是,仅当
IsPostBack
false
时才运行代码。是的,但按钮被单击,它确实转到了它的功能。如果我删除了If(postBack),它就工作了。好吧,这就是我想要的,但是如何使它成为我的function@IgorGumush这取决于您希望何时执行它。它应该在页面第一次加载时执行吗?或者响应单击按钮?响应按钮单击您是对的,请在回答中添加以下内容:当页面发回时,需要再次创建动态构建的按钮。否则他们不会work@IgorGumush请编辑您的问题,以便显示(明确哪些是您的更新代码)问题在于,如果我没有使用该函数,我不知道要显示的页面,因此如果有回帖,您希望调用DisplayLeadsPage函数,对吗?
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, "");
}