2016-10-24 10 views
0

セッションでデータを格納するためにジェネリックを使用しようとしていました。 情報を処理するのに2ページと1クラス名の人がいます。C#Generic to Session

Page 1デフォルトページでは、ユーザーは名前を入力して性別と日付を選択できます。 私はサブミットしたすべてのユーザーデータを第2ページに表示するために、汎用の&セッションにサブミットして保存しようとしています。ここで

DefaultPage

public partial class _Default : Page 
{ 
    Person p; 
    List<Person> Test; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      Test = new List<Person>(); 
      Session["carrytonext"] = Test; 
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Person p = new Person(TextBox1.Text, DropDownList1.SelectedValue, Calendar1.SelectedDate); 
     Label1.Text = p.PrintPerson(); 
     Test = (List<Person>)Session["carrytonext"]; 
     Test.Add(new Person(TextBox1.Text, DropDownList1.SelectedValue, Calendar1.SelectedDate)); 

    } 
} 

私のクラスである:私の第二のページで

public class Person 
{ 
    public string name; 
    private string gender; 
    private DateTime dob; 

    public string Name 
    { 
     get 
     {return name;} 

     set 
     {name = value;} 
    } 

    public string Gender 
    { 
     get 
     {return gender;} 

     set 
     {gender = value;} 
    } 

    public DateTime Dob 
    { 
     get 
     {return dob;} 

     set 
     {dob = value;} 
    } 

    public Person(string name, string gender, DateTime dob) 
    { 
     this.name = name; 
     this.gender = gender; 
     this.dob = dob; 
    } 

    public string PrintPerson() 
    { 
     string s; 
     s = "Hello, my name is " + name + ". I'm " + gender + ". My DOB is " + dob.ToShortDateString() + "\n\n"; 
     return s; 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    foreach (var inputstring in Test) 
    { 
     ListBox1.Items.Add(inputstring + ""); 
    } 
} 

答えて

1

あなたが設定する必要があります。再びテストリストからセッション:

ページ1

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Person p = new Person(TextBox1.Text, DropDownList1.SelectedValue, Calendar1.SelectedDate); 
    Label1.Text = p.PrintPerson(); 
    Test = (List<Person>)Session["carrytonext"]; 
    Test.Add(new Person(TextBox1.Text, DropDownList1.SelectedValue, Calendar1.SelectedDate)); 
    // Add this line to your code 
    Session["carrytonext"] = Test;  
} 

ページ2

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<Person> test = (List<Person>)Session["carrytonext"]; 
    foreach (var inputstring in Test) 
    { 
     // change here 
     ListBox1.Items.Add(inputstring.PrintPerson()+" "); 
    } 
} 
+0

私はそれは常に、namespace.Person(<私のクラス)を示しているようだリストボックスをチェックするたびに値は実際のパススルーではありません。あなたは私にこのことについていくつか案内することができますか? –

+0

コードを変更しました。新しいコードを試してください。 –

+0

ありがとうございます! "PrintPerson"について少し説明できますか? –