2011-04-11 3 views
1

왜 내 OnPreLoad 함수가 search.aspx.cs에 대해 실행되지 않는지 알 수 없습니다.
* 업데이트 * - 문제를 일으키는 것이 무엇인지 알았지 만 그게 왜 문제인지 이해할 수 없습니다. 내 질문을 업데이트했습니다.asp.net OnPreLoad가 실행되지 않습니까?

// search.aspx -- THIS <select runat="server"> CAUSED ALL the problem 
<select runat="server" id="slctCategories"> 
    <asp:Repeater runat="server" ID="optCategories"> 
    <ItemTemplate> 
    <option value=""></option> 
    </ItemTemplate> 
    </asp:Repeater> 

</select> 

// search.aspx.cs 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class search : BTPage 
{ 
    protected override void OnPreLoad(EventArgs e) 
    { 
     base.OnPreLoad(e); 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

} 

// BTPage.aspx.cs - the file that search.aspx.cs inherits from 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class BTPage : System.Web.UI.Page 
{ 
    protected SqlConnection cnx; 

    protected override void OnPreLoad(EventArgs e) 
    { 
     cnx = new SqlConnection(ConfigurationManager.AppSettings["database"]); 
     cnx.Open(); 
    } 

    protected override void OnUnload(EventArgs e) 
    { 
     cnx.Close(); 
    } 

} 

어떤 이상한 것은도 OnUnload가 해고 않는다는 것입니다 :

다음은 세 개의 관련 파일입니다. 무슨 일이야? 왜 내 OnPreLoad 화재가 발생하지 않습니까?

** 업데이트 ** - search.aspx에 에서 <select>으로 변경하면 내 사전로드가 실행됩니다. 누군가이 문제를 해결 한 이유를 설명해 주시겠습니까? 나는 이것을 몇 시간 동안 고심하고 있었다.

+0

이상한 점이 있습니다. DropDownList를 사용하지 않는 이유가 있습니까? – Town

+0

그래, 방금 asp : dropdownlist를 발견했다. 나는 약 1 일 동안 .net으로 만 놀았습니다. – John

답변

1

당신이 당신의 select를 사용하는 방법에 이상한 일이있을 수 있습니다. 나는 실제로 컴파일/런타임 오류가 발생하지 않기 때문에 놀랍습니다.

DropDownList 컨트롤 대신 사용할 수 있습니다. 그러나 HttpSelectList 컨트롤에는 항목을 추가 할 때도 비슷한 인터페이스가 있습니다. 추가 목록 컨트롤이 필요하지 않습니다.

내 생각에 서버 컨트롤로 문제를 해결했기 때문에 (신기능이 수정 됨) 정상적인 OnPreLoad가 해당 구문에서 실행되는 것을 방지하는 미묘한 변화가있었습니다.

1

BTPage에서는 base.OnPreLoad 호출하지 않습니다 : 몰라요

protected override void OnPreLoad(EventArgs e) 
{ 
    cnx = new SqlConnection(ConfigurationManager.AppSettings["database"]); 
    cnx.Open(); 
} 

이 있지만, 방법을 재정의 검색 클래스를 방해하는, 또는 어떤 select이있다하는 것은 아무것도 할 이유. (예 : 어쨌든 효과가 있었음). 그러나 일반적으로 오버라이드 된 메소드에서 기본 메소드를 호출하는 것이 좋습니다 (심지어 이와 같이 사용자가 재정의 할 수있는 메소드도 포함). 일어날 것으로 예상되는 다른 것이 코어 Page.OnPreLoad 메소드에서 발생하는지 여부는 알 수 없습니다. 당신은 그 태그 내부에 Repeater 중첩되어서는 안

<select runat="server" id="slctCategories"> 
    <asp:Repeater runat="server" ID="optCategories"> 
     <ItemTemplate> 
      <option value=""></option> 
     </ItemTemplate> 
    </asp:Repeater> 
</select> 

:

관련 문제