Cookie отображается только при обновлении? - PullRequest
0 голосов
/ 12 июня 2009

У меня есть некоторые проблемы с пониманием этого, так что вот оно.

Я пытаюсь установить cookie и отобразить значение на странице, используя ASP.NET + C #.

вот мой код:

protected void lbChangeToSmall_Click(object sender, EventArgs e)
        {
            Response.Cookies["fontSize"].Value = "small";
        }

и

<asp:LinkButton runat="server" id="lbChangeToSmall" Text="A" CssClass="txt-sm" OnClick="lbChangeToSmall_Click"></asp:LinkButton>

И наконец

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Response.Write( Request.Cookies["fontSize"].Value);
            }

        }

Когда я нажимаю на кнопку, на странице ничего не отображается, но файл cookie фактически установлен. Если я обновлю страницу, появится файл cookie.

Похоже, что файл cookie установлен правильно, но приложение не может сразу его прочитать.

Я пытался избавиться от if (postBack):

 protected void Page_Load(object sender, EventArgs e)
        {
                Response.Write( Request.Cookies["virgilFontSize"].Value);
        }

но это ничего не изменило.

Что я делаю не так?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 12 июня 2009

Событие lblChangeToSmall_Click наступает после события Page_Load. Поэтому запись cookie не будет доступна в Запросе до последующей обратной передачи.

Это будет доступно клиенту сразу же.

0 голосов
/ 12 июня 2009

В первый раз, запрос не имеет куки (пока); он будет иметь их только во второй раз после того, как ответ установил их. Таким образом, ваш код должен иметь дело с возможностью того, что Request.Cookies может просто не иметь a "fontSize" запись и обеспечить правильное значение по умолчанию, когда это так. Например:

HttpCookie cookie = Request.Cookies.Get("fontSize");
// Check if cookie exists in the current request.
if (cookie == null)
{
   Response.Write( "Defaulting to 'small'.");
}
else
{
   Response.Write( Request.Cookies["fontSize"].Value);
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...