Button_click未将TextBox值分配给对象属性

时间:2018-11-22 08:44:47

标签: c# asp.net buttonclick

我为名为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; }
        }
    }
}

为什么没有将文本框值分配给对象属性?为什么没有创建该对象并将其添加到列表中?我已经运行了测试,并且主列表始终为空,并且其中没有任何内容。

1 个答案:

答案 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;
    }
}