好的,我的项目目前有一些代码。
基本上用户进入页面并且他们当前的密码在密码文本框中,并且他们的头像在下拉列表中被选中。
他们可以通过编辑文本框中的文本来更改其密码,并通过从列表中选择一个新的头像来更改其头像。然后将其写入保存此信息的文件中。它写入文件没关系,但它会写入最初在文本框和删除列表中的内容。
如果我在页面加载中注释掉这些行:
avatarDropList.SelectedValue = Session["avatar"].ToString();
newPasswordTextbox.Text = Session["password"].ToString();
它正确地更新了文件,但这不是我想要的,因为我希望最初显示的旧密码以及在Dropbox中选择的头像。
以下代码:
public partial class TuitterProfile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
avatarImage.ImageUrl = "~/images/avatars/" + Session["avatar"] + ".gif";
avatarDropList.SelectedValue = Session["avatar"].ToString();
userNameTextbox.Text = Session["user"].ToString();
newPasswordTextbox.Text = Session["password"].ToString();
}
protected void okButton_Click(object sender, ImageClickEventArgs e)
{
string username = Session["user"].ToString();
string password = Session["password"].ToString();
string newPassword = newPasswordTextbox.Text;
string newAvatar = avatarDropList.SelectedValue;
int allDataReference = -1;
//Each element in the array is a string(Username Password Avatar)
string[] allData = File.ReadAllLines(Server.MapPath("~") + "/App_Data/tuitterUsers.txt");
for (int i = 0; i < allData.Length; i++)
{
string[] user = allData[i].Split(' ');
if (user[0] == username && user[1] == password)
{
allDataReference = i;
}
}
if (allDataReference > -1)
{
Session["avatar"] = newAvatar;
Session["password"] = newPassword;
allData[allDataReference] = username + " " + newPassword + " " + newAvatar;
File.WriteAllLines(Server.MapPath("~") + "/App_Data/tuitterUsers3.txt", allData);
}
}
}
答案 0 :(得分:8)
在ASP.Net页面事件生命周期中,每次请求都会调用Page_Load。你在这里做的是每次加载页面时重置TextBox的值,其中包括按下按钮保存配置文件的时间。
您需要做的就是在设置初始值时检查当前请求是否为回发:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
avatarImage.ImageUrl = "~/images/avatars/" + Session["avatar"] + ".gif";
avatarDropList.SelectedValue = Session["avatar"].ToString();
userNameTextbox.Text = Session["user"].ToString();
newPasswordTextbox.Text = Session["password"].ToString();
}
}