ASP.NET私有成员字段在回发时丢失值(ASP.NET private member field loses value on postback)
考虑下面的代码:
public partial class TeacherControlPanel : System.Web.UI.Page { protected string username = string.Empty; protected void Page_Load(object sender, EventArgs e) { username = (string)Request.QueryString["username"]; Ice_Web_Portal.BO.Teacher teacher = Ice_Web_Portal.BO.Teacher.GetTeacherByUsername(username); if (teacher != null) { labUsername.Text = username; labName.Text = teacher.TeacherName; labTeacherCode.Text = teacher.TeacherCode; Dept dept = teacher.Department; if (dept != null) { labDepartment.Text = dept.DeptName; } } else { //labErrorMessage.Text = "No teacher found"; } } protected void btnSendMail_Click(object sender, EventArgs e) { Response.Redirect(@"~/Teacher/TeacherComposeMail.aspx?username=mahabub" + username); } }在这段代码中,当我将'用户名'声明为私有时,它在后续回发之后被初始化为空。
为什么?
什么秘密?
Consider the following code:
public partial class TeacherControlPanel : System.Web.UI.Page { protected string username = string.Empty; protected void Page_Load(object sender, EventArgs e) { username = (string)Request.QueryString["username"]; Ice_Web_Portal.BO.Teacher teacher = Ice_Web_Portal.BO.Teacher.GetTeacherByUsername(username); if (teacher != null) { labUsername.Text = username; labName.Text = teacher.TeacherName; labTeacherCode.Text = teacher.TeacherCode; Dept dept = teacher.Department; if (dept != null) { labDepartment.Text = dept.DeptName; } } else { //labErrorMessage.Text = "No teacher found"; } } protected void btnSendMail_Click(object sender, EventArgs e) { Response.Redirect(@"~/Teacher/TeacherComposeMail.aspx?username=mahabub" + username); } }In this code, when I am declaring 'username' as private, it is initialized to null after subsequent post backs.
Why?
What is the secret?
最满意答案
因为ASP.NET是无状态的,这意味着它不会保留从回发到回发的状态。 将用户保存到视图状态,会话或应用程序以在回发到回发时查看它。
#region UserName public string UserName { get { if (this.ViewState["UserName"] == null) return string.Empty; return (string)this.ViewState["UserName"]; } set { this.ViewState["UserName"] = value; } } #endregionBecause ASP.NET is stateless meaning it does not keep it state from post back to postback. Save the user to the viewstate, session, or application to see it on postback to postback.
#region UserName public string UserName { get { if (this.ViewState["UserName"] == null) return string.Empty; return (string)this.ViewState["UserName"]; } set { this.ViewState["UserName"] = value; } } #endregion更多推荐
发布评论