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 函数,回发如预期的那样为真,但该函数未触发(已使用调试器检查)。
- 如果我删除 IsPostBack 并且它会重新开始,那么按钮功能将被触发。
这有什么问题?如何正确使用它?
您第一次请求您的页面时,您的页面不会回传。 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, "");
}
找到问题的答案。
当页面回发到服务器时。
我需要重建控件,否则,这些控件将为空。
我正在处理网页, 我需要它在第一次加载时从 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 函数,回发如预期的那样为真,但该函数未触发(已使用调试器检查)。
- 如果我删除 IsPostBack 并且它会重新开始,那么按钮功能将被触发。
这有什么问题?如何正确使用它?
您第一次请求您的页面时,您的页面不会回传。 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, "");
}
找到问题的答案。
当页面回发到服务器时。 我需要重建控件,否则,这些控件将为空。