2012-03-27 6 views
2

기본적으로 사용자 지정 usercontrol이 있는데, 기본적으로 데이터베이스의 값이 미리 채워진 드롭 다운 목록입니다.사용자 지정 DropDownList의 OnChange 특성이 렌더링되지 않습니다.

<asp:DropDownList ID="selResponseTimes" runat="server" SkinID="filterSkin">     
</asp:DropDownList> 

코드 뒤에 :

public partial class Response_Times_Drop_Down : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      DataTable objDataTable = DAL.ExecuteDataTable("sp_cl_Response_Times_Get", null); 
      selResponseTimes.DataSource = objDataTable; 
      selResponseTimes.DataTextField = "TM_Code"; 
      selResponseTimes.DataValueField = "TM_Code"; 
      selResponseTimes.DataBind(); 
     } 
    } 

    public string SelectedValue 
    { 
     get 
     { 
      return selResponseTimes.SelectedValue; 
     } 
     set 
     { 
      selResponseTimes.SelectedValue = value; 
     } 
    } 

} 

컨트롤은 다음과 같이 내 페이지에 추가하고, 잘 작동된다

<asp:ResponseTimesDropDown runat="server" ID="selResponse" /> 

내가 표준 컨트롤에 속성으로 클라이언트 측 이벤트를 추가 해요 다음을 사용하여 Page_Load에 입력하십시오 :

txtCallRelatedCall.Attributes.Add("onblur", "CheckRelatedCall()"); 

그러나 사용자 지정 컨트롤로이 작업을 시도하면 추가되지 않습니다.

selResponse.Attributes.Add("onchange", "CalculateResponseTime()"); 

그러나 코드를 디버깅하는 경우 속성이 컬렉션에 추가되고 있으며 페이지에 출력되지 않는 것처럼 보입니다. 왜 이런거야?

+0

javacript 및 html 부분을 표시 할 수 있습니까? 또한 "CheckRelatedCall(); false;를 반환하도록 설정하십시오." 및 "CalculateResponseTime(); false를 반환합니다." 만약에 작동하는지보기 위하여. – Aristos

+0

내 컨트롤에 onchange 특성을 성공적으로 추가 할 수 없기 때문에 이것은 부적절합니다. 자바 스크립트를 호출하지 않습니다. – fourdam

+0

내 가정은, 사용자 정의 컨트롤이 아닌'Page_Load' 이벤트의 표준 컨트롤에 특성을 추가 할 수 있기 때문에 컨트롤이 이미 렌더링되어 있으므로 이전 단계에서 특성을 추가해야하기 때문입니다. – fourdam

답변

2

페이지 수명주기의 어느 단계에서 특성을 추가하고 있습니까?

시도하는 것은 (댓글 참조) Page_Init

Protected void Page_Init(object sender, EventArgs e) 
{ 
    selResponse.Attributes.Add("onchange", "CalculateResponseTime()"); 
} 

편집에 그들에 추가 :

Public void CalculateResponseEnabled() 
{ 
     selResponseTimes.Attributes.Add("onchange", "CalculateResponseTime()"); 
} 

그런 다음 당신의이 수행하여 CalculateResponseEnabled 호출 할 수 있습니다.

selResponse.CalculateResponseEnabled(); 
+0

죄송합니다. Page_Load에 추가 중이며 Page_PreRender에서 사용하지 않으려 고 시도했습니다. 거기에 Page_Init을 시도했지만 성공하지 못했습니다. – fourdam

+0

컨트롤 내부가 아닌 폼에서 추가 할 이유가 있습니까? 컨트롤 안에 selResponseTimes에 추가하면 제대로 작동합니다. –

+0

내 논리는 이것이 재사용 가능한 컨트롤이라는 것입니다. 이 컨트롤 페이지를 사용할 때마다 클라이언트 쪽 onchange 이벤트가 필요하지는 않습니다. – fourdam

0

나는 동일한 문제가있었습니다. 사용중인 특정 컨트롤의 OnPreRender 이벤트에 코드를 추가하고 작업을 시작했습니다.

관련 문제