使用 C# asp.net 更新 Web 应用中的用户信息
本文关键字:用户 信息 应用 Web asp net 更新 使用 | 更新日期: 2023-09-27 18:31:27
我正在创建一个Web应用程序,在此应用程序中,我希望允许用户更新其用户信息(名字,姓氏,电子邮件,电话号码,公司名称)或更改密码。 当页面加载时,其当前信息将输入到文本框中。 我的问题是我不知道如何应用用户所做的更改。 我的代码目前如下所示:
DataClasses1DataContext context = new DataClasses1DataContext();
User user = new User();
protected void Page_Load(object sender, EventArgs e)
{
string usr = Session["SessionUserName"].ToString();
user = (from u in context.Users
where u.username.Equals(usr)
select u).FirstOrDefault();
txtFName.Text = user.firstName;
txtLName.Text = user.lastName;
txtCompany.Text = user.companyName;
txtEmail.Text = user.email;
txtPhone.Text = user.phoneNumber;
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
using (DataClasses1DataContext context2 = new DataClasses1DataContext())
{
User nUser = (from u in context2.Users
where u.username == user.username
select u).SingleOrDefault();
if (nUser != null)
{
//make the changes to the user
nUser.firstName = txtFName.Text;
nUser.lastName = txtLName.Text;
nUser.email = txtEmail.Text;
if (!String.IsNullOrEmpty(txtPhone.Text))
nUser.phoneNumber = txtPhone.Text;
if (!String.IsNullOrEmpty(txtCompany.Text))
nUser.companyName = txtCompany.Text;
nUser.timeStamp = DateTime.Now;
}
//submit the changes
context2.SubmitChanges();
Response.Redirect("Projects.aspx");
}
这不会给我任何错误,但它也不会应用更改。 一些谷歌搜索导致我添加
context2.Users.Attach(nUser);
但这给了我错误消息:System.InvalidOperationException:无法附加已经存在的实体。 所以我尝试了
context2.Users.Attach(nUser, true);
我收到了相同的错误消息。
再看谷歌,我发现了有关首先分离实体的信息,但该信息大约有 3 年的历史,似乎不再有效(作为上下文。分离或上下文。Users.Detach 不是选项,如果我尝试使用它们,会给我构建错误)。 我收到的其他错误消息(我不记得我是如何诚实地到达的)建议我更改更新策略,以便我将 Users 类下的所有字段设置为从不更新策略。 有人建议反序列化然后再次序列化数据,但我找不到有关如何执行此操作的任何信息。 任何帮助将不胜感激。
编辑:由于下面的一些建议,更改了代码,但它仍然不起作用。 我没有收到任何错误消息,但数据未保存。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string usr = Session["SessionUserName"].ToString();
user = (from u in context.Users
where u.username.Equals(usr)
select u).FirstOrDefault();
txtFName.Text = user.firstName;
txtLName.Text = user.lastName;
txtCompany.Text = user.companyName;
txtEmail.Text = user.email;
txtPhone.Text = user.phoneNumber;
}
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
//make the changes to the user
user.firstName = txtFName.Text;
user.lastName = txtLName.Text;
user.email = txtEmail.Text;
if (!String.IsNullOrEmpty(txtPhone.Text))
user.phoneNumber = txtPhone.Text;
if (!String.IsNullOrEmpty(txtCompany.Text))
user.companyName = txtCompany.Text;
user.timeStamp = DateTime.Now;
//submit the changes
context.SubmitChanges();
Response.Redirect("Projects.aspx");
}
发生这种情况是因为您在更新之前将相同的信息写回这些文本框。您需要做的就是将page_load更改为以下内容:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string usr = Session["SessionUserName"].ToString();
user = (from u in context.Users
where u.username.Equals(usr)
select u).FirstOrDefault();
txtFName.Text = user.firstName;
txtLName.Text = user.lastName;
txtCompany.Text = user.companyName;
txtEmail.Text = user.email;
txtPhone.Text = user.phoneNumber;
}
}
page_load在更新之前执行。因此,它正在重新分配原始值,然后使用相同的值更新它们。希望这有帮助!祝你好运!
编辑:问题更新后所做的更改:
将整个代码更改为此代码。我还添加了一些您应该处理的需要检查,并从顶部删除了全局变量:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["SessionUserName"] != null)
{
string usr = Session["SessionUserName"].ToString();
DataClasses1DataContext context = new DataClasses1DataContext();
User user = (from u in context.Users
where u.username.Equals(usr)
select u).FirstOrDefault();
if (user != null)
{
txtFName.Text = user.firstName;
txtLName.Text = user.lastName;
txtCompany.Text = user.companyName;
txtEmail.Text = user.email;
txtPhone.Text = user.phoneNumber;
}
else
{
//--- handle user not found error
}
}
else
{
//--- handle session is null
}
}
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
if (Session["SessionUserName"] != null)
{
string usr = Session["SessionUserName"].ToString();
try
{
DataClasses1DataContext context = new DataClasses1DataContext();
User nUser = (from u in context.Users
where u.username.Equals(usr)
select u).FirstOrDefault();
//make the changes to the user
nUser.firstName = txtFName.Text;
nUser.lastName = txtLName.Text;
nUser.email = txtEmail.Text;
if (!String.IsNullOrEmpty(txtPhone.Text))
nUser.phoneNumber = txtPhone.Text;
if (!String.IsNullOrEmpty(txtCompany.Text))
nUser.companyName = txtCompany.Text;
nUser.timeStamp = DateTime.Now;
//submit the changes
context.SubmitChanges();
Response.Redirect("Projects.aspx");
}
catch (Exception ex)
{
//--- handle update error
}
}
else
{
//--- handle null session error
}
}
这应该适合你。让我知道!祝你好运!