我的问题是,当我按下我的按钮(导致回发)时,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。我不知道为什么会这样。任何帮助都会有所帮助。
答案 0 :(得分:3)
这是预期的行为。单击按钮时,将完成回发。执行Page_Load
,然后执行makeFisicalEenhedenCookie
,页面呈现并将其与您在响应中设置的cookie一起发送给用户。当另一个回发完成后,用户将cookie发送到服务器,您可以处理它。它是asp.net页面生命周期的基本流程。
简而言之:如果您在回复中设置了Cookie,则在下一次请求之前无法查询Cookie。
答案 1 :(得分:1)
这是因为加载后会处理控制事件。 请参阅https://msdn.microsoft.com/en-us/library/ms178472.aspx了解完整的生命周期。
因此,在单击事件之前会触发页面加载事件中的代码。