C# ASP.net回发及其功能
我在做一个网页, 我需要的是,当它第一次加载时,它将从api获取数据 然后我想用相同的数据从一页转到另一页 我用了iPostbackC# 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
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, "");
}