2015-05-14 10 views
11

Có lý do nào khiến phiên ASP.NET kết thúc và khởi động lại sẽ can thiệp (ngăn chặn) sự kiện SelectedIndexChanged kích hoạt trên danh sách thả xuống không?Kết thúc phiên và khởi động lại đang ngăn chặn DropDownList_SelectedIndexChanged khỏi việc bắn

Biểu mẫu được đăng lại nhưng điểm dừng của tôi không bị ảnh hưởng?

Mọi thứ hoạt động hoàn hảo trước khi khởi động lại phiên.

Đây là asp cho sự kiểm soát:

<asp:DropDownList ID="dlSort" runat="server" AutoPostBack="true" 
        onselectedindexchanged="dlSort_SelectedIndexChanged"> 
</asp:DropDownList> 

Dưới đây là một phần của mã:

protected void dlSort_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    PopulateItems(); 
    //Breakpoint above- not hit after session restarts, but hit prior to session end. 
} 

tôi là trái với một hình thức trống rỗng như nó không nhận được repopulated ...

Xin cảm ơn trước,

M

Sửa 1:

Đây là mã mà kiểm soát được dân cư:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Form.Action = Request.RawUrl;//Required as page is rewritten 
    if (!IsPostBack) 
    { 
     SetNoItemsMessage(""); 
     PopulateSortDropDown(); 
     PopulateItems(); 
    } 
} 

private void PopulateSortDropDown() 
{ 
    clsProducts ops = new clsProducts(); 
    DataTable dt = ops.GetProductSortDropDownData(); 
    dlSortBy.DataSource = dt; 
    dlSortBy.DataBind(); 
    dlSortBy.ClearSelection(); 
    dlSortBy.SelectedValue = "1"; 
} 

Chỉnh sửa 2:

Để làm rõ, các PopulateItems() phương pháp populates một lặp dữ liệu và nên được chạy trên chỉ số thay đổi của thả xuống sắp xếp (dlSort_SelectedIndexChanged) - điều này không xảy ra mặc dù postback đang xảy ra.

Page_Load thực hiện một phương thức điền dlSort này luôn được chạy.

Tôi đã kiểm tra trang rộng rãi và mọi thứ khác với sự kiện thay đổi chỉ mục kích hoạt.

Sửa 3:

void Session_Start(object sender, EventArgs e) 
{ 
    InitialiseCommonSessionVariables();//This piece of code sets default values for session variables that are used in every case. 
} 
+0

Có bất kỳ biến phiên nào được sử dụng trong phương thức PopulteItems() không? – Mairaj

+0

Cảm ơn, có các biến phiên được sử dụng nhưng phiên được truy cập thông qua một đối tượng kiểm tra phiên khởi tạo trước khi truy cập các biến riêng lẻ. Vấn đề chính là dlSort_SelectedIndexChanged không kích hoạt sau khi phiên bị mất và được thiết lập lại. – Mack

+0

Đăng mã có số lượng ban đầu của DDL. Những điều có thể có liên quan: trong vòng đời của trang, vòng đời đó được điền (ví dụ: Page_Load)? Nó chỉ có dân cư nếu IsPostBack là sai? ViewState có được bật không? Các triệu chứng của bạn cho thấy DDL chưa được phổ biến trên postback. – Joe

Trả lời

2

tôi đã trải qua một cái gì đó tương tự và đã phải thực hiện một cách giải quyết bằng cách sử dụng sự kiện Page_PreRender để vượt qua nó.

Trong trường hợp của bạn, bạn có thể kiểm tra nếu PopulateItems() đã chạy và nếu không chạy nó trước khi kết xuất.

+0

Hi @ohoundj, tôi đã tạm thời triển khai một cái gì đó tương tự như thế này, nhưng muốn hiểu và khắc phục vấn đề cơ bản. – Mack

+0

Giải thưởng tiền thưởng vì giải pháp thay thế được thực hiện và có vẻ thành công, tuy nhiên tôi vẫn quan tâm đến nguyên nhân gốc rễ và sẽ quan tâm đến bất kỳ nhận xét nào khác. – Mack

0

Tôi nghĩ lý do có thể nằm trong cài đặt xác thực. Một hậu sau bị sa thải sau khi phiên của bạn đã hết hạn có thể dẫn bạn đến trang đăng nhập, do xác thực đặt lại.

Và thậm chí chuyển hướng có thể được thực hiện một cách minh bạch, sau khi chuyển hướng đến trang đăng nhập, bạn sẽ mất tất cả các thông số Đăng, được chỉ định trong yêu cầu đăng lại gần đây.

Điều này có nghĩa là, ASP.NET sẽ không có cách nào để phát hiện điều khiển nào đã kích hoạt hậu tố (nó dựa trên tham số EVENTTARGET) và do đó sẽ không kích hoạt sự kiện SelectedIndexChanged.

+0

Tôi đang thử nghiệm với EVENTTARGET ngay bây giờ và sẽ đăng lại với kết quả sau. – Mack

+0

Tôi đã triển khai mã để kiểm tra EVENTTARGET bằng cách sử dụng câu trả lời của @ SurajSingh từ bài đăng này [link] (http://stackoverflow.com/questions/20838022/eventtarget-is-empty-on-postback-of-button-click) và nó thực sự là dlSortBy. Page_Load được nhấn sau đó (không chạy dlSort_SelectedIndexChanged), Page_PreRender được nhấn. – Mack

+0

Trông thật kỳ lạ, chỉ cần kiểm tra trên một dự án sạch sẽ với cách tiếp cận tương tự, và có vẻ như hoạt động tốt - sự kiện được kích hoạt thành công ngay cả sau khi phiên hết hạn. Bạn có thể kiểm tra xem các mục có được điền trong trường hợp của bạn trên PageLoad sau khi phiên kết thúc không? – user2772146

0
  ASP.Net Code : 
     --------------- 

    <asp:DropDownList ID="ddList" runat="server" AutoPostBack="True" Height="65px" OnSelectedIndexChanged="ddList_SelectedIndexChanged" Width="198px"> 
     </asp:DropDownList> 


C# Code : 
--------- 

public void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       dropdown(); 
      } 
     } 
. 
<your code goes here> .... 

public void dropdown() 
     { 
      //String Sql statement 
      string Sqlstr = "select CountryCode,Description from ca_countryMaster order by description"; 


      string DBCon = "Data Source=RAJA;Initial Catalog=CareHMS;Integrated Security=True;"; 
      SqlConnection SqlCon = new SqlConnection(DBCon); 
      SqlCon.Open(); 

      SqlDataAdapter Sqlda = new SqlDataAdapter(Sqlstr, SqlCon); 
      DataSet ds = new DataSet(); 
      Sqlda.Fill(ds); 
      ddList.DataSource = ds.Tables[0]; 
      ddList.DataTextField = "Description"; 
      ddList.DataValueField = "CountryCode"; 
      ddList.DataBind(); 

      ds.Dispose(); 
      Sqlda.Dispose(); 
      SqlCon.Close(); 
     } 
+0

Hi @Suttipasanga mã này dường như điền một danh sách thả xuống, đây không phải là vấn đề tôi đang gặp phải, lỗi là sự kiện SelectedIndexChanged của trình đơn thả xuống không kích hoạt trên postback sau khi phiên được khởi động lại. – Mack

Các vấn đề liên quan