我为名为UserInfo
的{{1}}类创建了一个测试对象。当我使用它时,一切正常,并且在对象列表中找到了该对象。当我将textbox.text值分配给对象属性并单击“提交”按钮时,将不会创建该对象,并且也不会在列表中显示该对象(无论该文本框值还是未分配给属性。我完全不知道为什么会这样。我尝试弄乱testUser
和会话变量,但全神贯注。它似乎不是状态问题。这是我的代码:
ViewState
这是对象的类设计:
namespace WebApplication1
{
public partial class CreateAccount : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<UserInfo> allUsersList = Application["AllUsersList"] as List<UserInfo>;
UserInfo testUser = new UserInfo();
testUser.FirstName = "Bob";
testUser.MiddleInitials = "B";
testUser.LastName = "Bob";
testUser.EmailAddress1 = "Bob@gmail.com";
testUser.EmailAddress2 = null;
testUser.StreetAddress = "123 Bob Lane";
testUser.AptNo = null;
testUser.City = "BobTown";
testUser.State = "TX";
testUser.Zip = "77550";
testUser.HomePhone = "5555555555";
testUser.JobExperience = "None";
testUser.Password = "bob1000";
allUsersList.Add(testUser);
}
protected void SaveButton_Click(object sender, EventArgs e)
{
List<UserInfo> allUsersList = Application["AllUsersList"] as List<UserInfo>;
UserInfo newUser = new UserInfo();
newUser.FirstName = firstName.Text;
newUser.MiddleInitials = middleInitials.Text;
newUser.LastName = lastName.Text;
newUser.EmailAddress1 = emailAddress1.Text;
newUser.EmailAddress2 = emailAddress2.Text;
newUser.StreetAddress = streetAddress.Text;
newUser.AptNo = aptno.Text;
newUser.City = city.Text;
newUser.State = state.Text;
newUser.Zip = zip.Text;
newUser.HomePhone = phone.Text;
newUser.JobExperience = jobExperience.Text;
newUser.Password = password.Text;
}
protected void CheckAccount_Click(object sender, EventArgs e)
{
List<UserInfo> allUsersList = Application["AllUsersList"] as List<UserInfo>;
UserInfo testUser = new UserInfo();
foreach (UserInfo item in allUsersList)
{
if (item.FirstName == "Bob")
{
emailTextBox.Text = "Bob was found.";
//Note that this works and and it finds the testUser
//value
}
}
}
}
}
我是asp.net的新手,这让我感到很愚蠢。任何帮助将不胜感激!
更新:未创建此对象并将其分配给列表:
namespace WebApplication1.App_Code
{
public class UserInfo
{
String firstName;
String middleInitials;
String lastName;
String emailAddress1;
String emailAddress2;
String streetAddress;
String aptNo;
String city;
String state;
String zip;
String homePhone;
String jobExperience;
String password;
public String FirstName
{
get { return firstName; }
set { firstName = value; }
}
public String MiddleInitials
{
get { return middleInitials; }
set { middleInitials = value; }
}
public String LastName
{
get { return lastName; }
set { lastName = value; }
}
public string EmailAddress1
{
get { return emailAddress1; }
set { emailAddress1 = value; }
}
public string EmailAddress2
{
get { return emailAddress2; }
set { emailAddress2 = value; }
}
public string StreetAddress
{
get { return streetAddress; }
set { streetAddress = value; }
}
public string AptNo
{
get { return aptNo; }
set { aptNo = value; }
}
public string City
{
get { return city; }
set { city = value; }
}
public string State
{
get { return state; }
set { state = value; }
}
public string Zip
{
get { return zip; }
set { zip = value; }
}
public string HomePhone
{
get { return homePhone; }
set { homePhone = value; }
}
public string JobExperience
{
get { return jobExperience; }
set { jobExperience = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
}
}
为什么没有将文本框值分配给对象属性?为什么没有创建该对象并将其添加到列表中?我已经运行了测试,并且主列表始终为空,并且其中没有任何内容。
答案 0 :(得分:2)
将项目添加到列表后,您没有将填充列表添加到Application["AllUsersList"]
。因此,您需要在代码中添加以下内容:
allUsersList.Add(testUser);
Application["AllUsersList"] = allUsersList;
在每个postback中,您总是得到旧值,因此您需要在Page-Load
事件中使用以下条件:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<UserInfo> allUsersList = Application["AllUsersList"] as List<UserInfo>;
....
....
allUsersList.Add(testUser);
Application["AllUsersList"] = allUsersList;
}
}