现在我已经制作了一份登记表。我希望用户输入他们的名字并将其另存为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 = "";
}
答案 0 :(得分:1)
您似乎没有包含所有相关代码(因为您甚至没有将Cookie添加到响应中),但是根据您发布的内容,您的问题似乎是不理解{{3} }。
当他们点击您的按钮时,Page_Load
事件将首先运行(Button1_Click
之前)。所以这意味着当cookie存在时,他们键入的内容会被cookie值覆盖......所以是的,他们永远不能设置新值,直到cookie被删除。
所以只需在{em>不回帖后设置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);
}
要实现的另一个好处是cookie不能真正被信任,因为它们可以由用户编辑。像ASP.NET Lifecycle这样的东西有帮助(安全的cookie - 通过HTTPS - 甚至更好,但是你只能通过HTTPS读取cookie,这可能会有问题,除非你的整个网站都是安全的),但对于我喜欢的敏感信息加密数据......你不希望有人将cookie中的名称更改为“Admin”,然后自由统治你的网站(假设你正在处理安全性)。
答案 1 :(得分:0)
您可以使用TextChange事件。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textchanged(v=vs.110).aspx
尝试:
<asp:TextBox runat="server" id="TextBox1" OnTextChanged="TextBox1_TextChanged" />
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
DeleteCookie();
}
我从未发现TextChanged事件对最终用户非常直观,因为您仍然需要一种方法让最终用户触发回发以触发事件。
有许多方法可以让它们触发回发,例如OnBlur,按Enter,单击按钮。这一切都取决于您希望用户体验的内容。
如果它是我的用户界面,那么我可能会有一个隐藏的保存按钮,当他们开始通过jQuery(或Javascript)键入TextBox时显示,当他们完成输入时,他们点击保存按钮来触发事件。