当Page_Load()触发时,Cookie未被处理

时间:2015-02-24 09:46:06

标签: c# asp.net cookies postback pageload

我的问题是,当我按下我的按钮(导致回发)时,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。我不知道为什么会这样。任何帮助都会有所帮助。

2 个答案:

答案 0 :(得分:3)

这是预期的行为。单击按钮时,将完成回发。执行Page_Load,然后执行makeFisicalEenhedenCookie,页面呈现并将其与您在响应中设置的cookie一起发送给用户。当另一个回发完成后,用户将cookie发送到服务器,您可以处理它。它是asp.net页面生命周期的基本流程。

简而言之:如果您在回复中设置了Cookie,则在下一次请求之前无法查询Cookie。

答案 1 :(得分:1)

这是因为加载后会处理控制事件。 请参阅https://msdn.microsoft.com/en-us/library/ms178472.aspx了解完整的生命周期。

因此,在单击事件之前会触发页面加载事件中的代码。