2014-01-31 6 views
0

Сейчас я сделал регистрационную форму. Я хочу, чтобы пользователь вводил свое имя и сохранял его как файл cookie. Когда они перезагружают сайт, их информация по-прежнему будет отображаться. Как я сейчас его кодировал, что происходит. Однако, если кто-то хочет ввести новую информацию, они должны нажать кнопку очистки. В любом случае, я могу получить его, если пользователь просто вводит новое имя, которое автоматически сохраняет этот файл cookie и использует новый файл cookie, который был введен. Вот некоторые из моего кодаВвод нового файла cookie для сохранения (также понимание файлов cookie)

Кроме того, чтобы быть немного более конкретным, я хочу, чтобы они могли вводить имя, регистрировать его, перезагружать страницу и имя появляется, но если они вводят новый имя над этим именем, и оно зарегистрируется, появится новое имя. Прямо сейчас они должны щелкнуть, прежде чем попасть в регистр.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.Cookies["FirstName"] != null) 
     { 
      TextBox1.Text = Request.Cookies["FirstName"].Value; 
     } 
protected void Button1_Click(object sender, EventArgs e) 
    { 
     Response.Cookies["FirstName"].Value = TextBox1.Text; 
     Response.Cookies["FirstName"].Expires = DateTime.Now.AddDays(30); 
    } 

Тогда как я их вводить новую информацию кнопка ясно (что я не хочу)

protected void Button2_Click(object sender, EventArgs e) 
    { 
     DeleteCookie(); 
    } 
    private void DeleteCookie() 
    { 
     HttpCookie cookie = new HttpCookie("FirstName"); 
     cookie.Expires = DateTime.Now.AddSeconds(-1); 
     Response.Cookies.Add(cookie); 
     TextBox1.Text = ""; 
    } 
+1

Чтобы уточнить, вы говорите, что TextBox1 всегда отображается, и если они меняют текст, который вы хотите, чтобы он автоматически истекал срок действия существующего файла cookie и сохранил новый? –

+0

@ DarrenS Да, это точно так. Прошу прощения, я пытаюсь закодировать это некоторое время, и мой мозг сейчас скремблирован. То, что вы сказали, именно то, что я хочу. Прямо сейчас я должен щелкнуть очистить и вызвать этот метод. –

ответ

0

Вы можете использовать событие TextChange. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textchanged(v=vs.110).aspx

Try:

<asp:TextBox runat="server" id="TextBox1" OnTextChanged="TextBox1_TextChanged" /> 


protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    DeleteCookie(); 
} 

Я никогда не находил событие TextChanged очень интуитивным для конечного пользователя, потому что вы все еще нужен способ для конечного пользователя, чтобы вызвать обратную передачу, чтобы получить событие огня.

Есть много способов заставить их вызвать обратную передачу, например OnBlur, нажав Enter, нажав кнопку. Все зависит от того, что вы хотите от пользователя.

Если бы это был мой пользовательский интерфейс, то у меня, вероятно, была бы скрытая кнопка «Сохранить», которая отображается, когда они начинают вводить текст в текстовом поле через jQuery (или Javascript), когда они заканчивают ввод, они нажимают кнопку «Сохранить», чтобы вызвать событие.

1

Не похоже, что вы включаете весь соответствующий код (поскольку вы даже не добавляете cookie в ответ), но, перейдя к тому, что вы опубликовали, ваша проблема, похоже, не понимает ASP.NET Lifecycle.

Когда они нажмут на вашу кнопку, событие Page_Load будет запущено первым (до Button1_Click). Таким образом, это означает, что все, что они набрали, перезаписывается значением cookie, когда файл cookie существует ... так что да, они никогда не смогут установить новое значение до тех пор, пока cookie не будет удален.

Так исправить это, только установив значение TextBox1, когда он не пост обратно:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack && Request.Cookies["FirstName"] != null) 
    { 
     TextBox1.Text = Request.Cookies["FirstName"].Value; 
    } 
} 

И ваш щелчок кнопки должен выглядеть как:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    HttpCookie c = Request.Cookies["FirstName"]; 
    if (c == null) 
    { 
     c = new HttpCookie("FirstName"); 
    } 

    c.Value = TextBox1.Text; 
    c.Expires = DateTime.Now.AddDays(30); 
    Response.Cookies.Add(c); 
} 

Другой хороший что для куки-файлов нельзя доверять, так как они могут быть отредактированы пользователем. Такие вещи, как HttpOnly справка (безопасные файлы cookie - через HTTPS - еще лучше, но тогда вы можете читать только cookie через HTTPS, что может быть проблематично, если весь ваш сайт не защищен), но для конфиденциальной информации мне нравится шифровать данные тоже ... вы не хотите, чтобы кто-то менял имя в cookie на «Admin», а затем освобождался от вашего сайта (предполагая, что вы справляетесь с безопасностью).

Смежные вопросы