Page_Load() 触发时未处理 Cookie
Cookie not being handled when Page_Load() fires
我的问题是,当我按下我的按钮(这会导致回发)时,在 click_event
中创建的 cookie 没有在我在 Page_Load
中调用的方法中进行处理。
代码如下:
//Page_Load
protected void Page_Load(object sender, EventArgs e)
{
if(!Context.User.Identity.IsAuthenticated)
{
FormsAuthentication.RedirectToLoginPage();
}
loadCookies();
}
//loadCookies
public void loadCookies()
{
for (int i = 0; i < 40; i++ )
{
if(Request.Cookies["FiscaleTable" + i.ToString()] != null){
TableRow row = new TableRow();
for (int i2 = 0; i2 < 10; i2++ )
{
TableCell cell = new TableCell();
cell.Text = Request.Cookies["FiscaleTable" + i.ToString()][i2.ToString()];
row.Cells.Add(cell);
}
FiscaleEenhedenTable.Rows.Add(row);
}
}
}
//Button_Click
public void makeFiscaleEenhedenCookie(object sender, EventArgs e)
{
ContentPlaceHolder Content;
Content = (ContentPlaceHolder)Master.FindControl("MainContent");
HttpCookie FiscaleEenhedenCookie = new HttpCookie("FiscaleTable" + (FiscaleEenhedenTable.Rows.Count - 1).ToString());
FiscaleEenhedenCookie.Expires = DateTime.Now.AddDays(1d);
for (int i2 = 0; i2 < 10; i2++ )
{
TextBox temp = (TextBox)Content.FindControl("FiscaleUnitTextBox" + (i2 + 1).ToString());
FiscaleEenhedenCookie[i2.ToString()] = temp.Text;
}
Response.Cookies.Add(FiscaleEenhedenCookie);
}
//Button
<asp:Button ID="FiscaleAddButton" runat="server" CommandName="FiAdd" Text="Toevoegen" ClientIDMode="Static" OnClick="makeFiscaleEenhedenCookie"/>
只要我调用另一个回发或刷新页面,就会处理 cookie。我不知道为什么会这样。任何帮助都会有所帮助。
这是预期的行为。单击按钮时,回发完成。 Page_Load
被执行,然后 makeFisicalEenhedenCookie
被执行,页面呈现并与您在响应中设置的 cookie 一起发送给用户。当另一个回发完成时,用户将 cookie 发送到服务器,您可以处理它。这是 asp.net 页面生命周期的基本流程。
简而言之:如果您在响应中设置了 cookie,则在下一次请求之前无法查询 cookie。
这是因为控件事件是在加载之后处理的。
请参阅 https://msdn.microsoft.com/en-us/library/ms178472.aspx 了解完整的生命周期。
因此您在页面加载事件中的代码在点击事件之前触发。
我的问题是,当我按下我的按钮(这会导致回发)时,在 click_event
中创建的 cookie 没有在我在 Page_Load
中调用的方法中进行处理。
代码如下:
//Page_Load
protected void Page_Load(object sender, EventArgs e)
{
if(!Context.User.Identity.IsAuthenticated)
{
FormsAuthentication.RedirectToLoginPage();
}
loadCookies();
}
//loadCookies
public void loadCookies()
{
for (int i = 0; i < 40; i++ )
{
if(Request.Cookies["FiscaleTable" + i.ToString()] != null){
TableRow row = new TableRow();
for (int i2 = 0; i2 < 10; i2++ )
{
TableCell cell = new TableCell();
cell.Text = Request.Cookies["FiscaleTable" + i.ToString()][i2.ToString()];
row.Cells.Add(cell);
}
FiscaleEenhedenTable.Rows.Add(row);
}
}
}
//Button_Click
public void makeFiscaleEenhedenCookie(object sender, EventArgs e)
{
ContentPlaceHolder Content;
Content = (ContentPlaceHolder)Master.FindControl("MainContent");
HttpCookie FiscaleEenhedenCookie = new HttpCookie("FiscaleTable" + (FiscaleEenhedenTable.Rows.Count - 1).ToString());
FiscaleEenhedenCookie.Expires = DateTime.Now.AddDays(1d);
for (int i2 = 0; i2 < 10; i2++ )
{
TextBox temp = (TextBox)Content.FindControl("FiscaleUnitTextBox" + (i2 + 1).ToString());
FiscaleEenhedenCookie[i2.ToString()] = temp.Text;
}
Response.Cookies.Add(FiscaleEenhedenCookie);
}
//Button
<asp:Button ID="FiscaleAddButton" runat="server" CommandName="FiAdd" Text="Toevoegen" ClientIDMode="Static" OnClick="makeFiscaleEenhedenCookie"/>
只要我调用另一个回发或刷新页面,就会处理 cookie。我不知道为什么会这样。任何帮助都会有所帮助。
这是预期的行为。单击按钮时,回发完成。 Page_Load
被执行,然后 makeFisicalEenhedenCookie
被执行,页面呈现并与您在响应中设置的 cookie 一起发送给用户。当另一个回发完成时,用户将 cookie 发送到服务器,您可以处理它。这是 asp.net 页面生命周期的基本流程。
简而言之:如果您在响应中设置了 cookie,则在下一次请求之前无法查询 cookie。
这是因为控件事件是在加载之后处理的。 请参阅 https://msdn.microsoft.com/en-us/library/ms178472.aspx 了解完整的生命周期。
因此您在页面加载事件中的代码在点击事件之前触发。