2010-11-15 10 views
15

Tôi có một ASP DropDownList được điền vào sự kiện Page_Load, sau khi tôi chọn một mục và nhấn một nút mục đã chọn sẽ bị xóa và mục đầu tiên trong DropDownList được chọn. (Các DropDownList chỉ cư khi trang không phải là postback)ASP.NET DropDownList không giữ lại mục được chọn trên postback

Trợ giúp xin vui lòng

if (!IsPostBack) 
    { 
      List<Country> lCountries = new List<Country>(); 
      List<CompanySchedule> lCompanySchedules = new List<CompanySchedule>(); 
      this.Load_Countries(lCountries); 
      this.Load_Schedules(lCompanySchedules); 
      if (personnelRec == null) 
      { personnelRec = new Personnel(); } 
     if (Request.QueryString["UA"] != null && Convert.ToInt32(Request.QueryString["UA"].ToString()) > 0) 
     { 
      userAccount.ID = Convert.ToInt32(Request.QueryString["UA"].ToString()); 
      App_Database.Snapshift_Select_Helper.SNAPSHIFT_SELECT_PERSONNEL_APP_ACCOUNT(ref userAccount); 
     } 
      this.imgEmployeePicture.ImageUrl = "./images/Employees/nophoto.gif"; 
      if (Request.QueryString["EI"] != null && Convert.ToInt32(Request.QueryString["EI"].ToString()) > 0) 
      { 
       this.Load_PersonnelRec(Convert.ToInt32(Request.QueryString["EI"].ToString())); 
      } 
      else 
      { 
       this.lblChangeDirectionHead.Enabled = false; 
       this.lblChangeDirections.Enabled = false; 
       this.lbSchedules.Disabled = true; 
      } 
    } 
+0

Vui lòng đăng mã cho sự kiện Page_Load của bạn. Điều đó sẽ giúp trả lời. –

+1

Bạn có một "if (! IsPostBack)" xung quanh mã dân số của bạn? – russau

+0

Tôi không thấy một DropDownList trong mã của bạn. Nó được thực hiện thông qua 'this.Load_Countries (lCountries);'? Ngoài ra, bạn đang cố gắng lấy giá trị đã chọn ở đâu? –

Trả lời

31

Vòng đời trang nào sau đây (cộng với các bước khác không liên quan đến câu hỏi của bạn):

  1. OnInit
  2. Điều khiển dân số từ ViewState (trong khi đăng lại)
  3. Đặt giá trị đã chọn (trong khi đăng lại)
  4. Page_Load

Bạn cần bật ViewState để có thể điền danh sách trước khi chọn "mục". Trong trường hợp này, hãy chắc chắn rằng bạn không repopulate trong Page_Load và mất giá trị được chọn. Làm điều gì đó như if (!IsPostback) { // Populate }

Nếu không, bạn phải điền danh sách theo cách thủ công vào sự kiện OnInit trên mọi yêu cầu trang. Page_Load quá trễ trong vòng đời, vì vậy mục đã chọn bị mất.

Edit:

Các DropDownList cũng phải có giá trị hiệu lực thiết lập (tách biệt với văn bản được hiển thị trong trình duyệt). Điều này được thực hiện thông qua tài sản DataValueField. Mỗi giá trị phải là duy nhất, nếu không chỉ mục trùng lặp đầu tiên sẽ được chọn. Nếu bạn nhìn vào nguồn HTML trong trình duyệt của mình, bạn cần có:

<select> 
    <option value="unique_value1">Displayed text1</option> 
    <option value="unique_value2">Displayed text2</option> 
</select> 

Giá trị duy nhất được sử dụng để chọn đúng mục ở phía máy chủ.

+0

Trong cửa sổ thuộc tính, EnableViewState được đặt thành true – mattgcon

+0

Xem các chỉnh sửa của tôi. Bạn đang kiểm tra xem đó là một postback? –

+0

Danh sách KHÔNG trả lại trên Postback, nó nằm trong câu lệnh if (! IsPostBack), do đó nó chỉ được gọi một lần. Xem mã ở trên – mattgcon

3

Bạn có đang sử dụng Trang chính không? Nếu vậy, hãy nhớ đặt EnableViewState trên đúng trang chính.