2012-04-23 17 views
6

Tình huống của tôi như sau: Tôi có các danh sách này với dữ liệu được chèn vào chúng khi người dùng nhấn nút ADD, nhưng tôi đoán là postback các List được đổi lại. Làm thế nào để bạn giữ chúng được bảo tồn? Tôi đã tìm kiếm câu trả lời, nhưng tôi đoán tôi không hoàn toàn hiểu cách sử dụng phiên, v.v.ASP.net với C# Giữ một danh sách trên postback

Tôi rất mới với ASP.net và không tốt hơn nhiều với C#.

public partial class Main : System.Web.UI.Page 
{ 


List<string> code = new List<string>(); 


protected void Page_Load(object sender, EventArgs e) 
{ 
    //bleh 

} 

protected void cmdAdd_Click(object sender, EventArgs e) 
{ 

    code.Add(lstCode.Text); 
} 
+0

Khi bạn nói danh sách, làm bạn có nghĩa là 'điều khiển ListView', hay cái gì khác? – SouthShoreAK

+0

@SouthShoreAK Anh ấy có nghĩa là danh sách chung: 'Danh sách ' – Khan

Trả lời

14

Chỉ cần sử dụng tài sản này để lưu trữ thông tin:

public List<string> Code 
{ 
    get 
    { 
     if(HttpContext.Current.Session["Code"] == null) 
     { 
      HttpContext.Current.Session["Code"] = new List<string>(); 
     } 
     return HttpContext.Current.Session["Code"] as List<string>; 
    } 
    set 
    { 
     HttpContext.Current.Session["Code"] = value; 
    } 

} 
+2

Đây là, theo tôi, cách tốt nhất để làm điều này. –

+0

Không chắc chắn cách sử dụng. –

+0

@JakeGaston chỉ cần sao chép thuộc tính này vào lớp chính của bạn. Và thay vì biến "mã" của bạn, hãy sử dụng thuộc tính "Mã". –

3

Đây là sự kỳ quặc trong ASP.NET. Bất cứ khi nào bạn lập trình thêm các mục vào một điều khiển bộ sưu tập (hộp danh sách, hộp tổ hợp), bạn phải điền lại điều khiển trên mỗi lần đăng lại.

Điều này là do Viewstate chỉ biết về các mục được thêm trong chu kỳ kết xuất trang. Việc thêm các mục ở phía máy khách chỉ hoạt động lần đầu tiên, sau đó mục đó biến mất.

Hãy thử điều này:

public partial class Main : System.Web.UI.Page 
{ 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       Session["MyList"] = new List<string>(); 
      } 
      ComboBox cbo = myComboBox; //this is the combobox in your page 
      cbo.DataSource = (List<string>)Session["MyList"]; 
      cbo.DataBind(); 
     } 




     protected void cmdAdd_Click(object sender, EventArgs e) 
     { 
      List<string> code = Session["MyList"]; 
      code.Add(lstCode.Text); 
      Session["MyList"] = code; 
      myComboBox.DataSource = code; 
      myComboBox.DataBind(); 
     } 
    } 
+0

Xin chào, cảm ơn, tôi sẽ dùng thử. Không gian tên (sử dụng Hệ thống ...) để làm cho từ khoá phiên làm việc là gì? –

+0

Phiên không phải là từ khóa. Đó là thuộc tính của loại HttpSessionState. Bạn có thể truy cập nó như thế này HttpContext.Current.Session. –

1

Bạn không thể giữ giá trị giữa bài ngửa.

Bạn có thể sử dụng phiên để giữ gìn danh sách:

// store the list in the session 
List<string> code=new List<string>(); 

protected void Page_Load(object sender, EventArgs e) 
{ 
if(!IsPostBack) 
    Session["codeList"]=code; 

} 
// use the list 
void fn() 
{ 
code=List<string>(Session["codeList"]); // downcast to List<string> 
code.Add("some string"); // insert in the list 
Session["codeList"]=code; // save it again 
}