我在网页上工作, 我需要它在第一次加载时会从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按预期为真,但函数没有触发(用调试器检查)。
有什么问题?如何使用它?
答案 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。