2012-03-27 23 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属性を正常に追加できないので、これは無関係です。私はjavascriptを呼び出すことはありません。 – fourdam

+0

私の前提は、コントロールが既にレンダリングされているので、私のカスタムコントロールではなく、 'Page_Load'イベントの標準コントロールに属性を追加できるからです。以前の段階で属性を追加する必要があるのですか? – fourdam

答えて

2

ページライフサイクルのどの段階で属性を追加していますか?

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

次に、あなたの中で実行してCalculateResponseEnabled呼び出すことができます。Page_Init

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

EDIT(コメントを参照)にそれらを追加する

してみてください。

selResponse.CalculateResponseEnabled(); 
+0

申し訳ありませんが、私はPage_Loadにそれらを追加しています。私はPage_PreRenderで無駄に試してみました。 Page_Initを試してみましたが、成功しませんでした。 – fourdam

+0

コントロール内にではなくフォームから追加する理由はありますか?コントロールの中にselResponseTimesに追加すると、それはうまくいくはずです。 –

+0

私のロジックは、これが再利用可能なコントロールだということでした。私は必ずこの特定のページだけで、コントロールを使用するたびにクライアント側の変更イベントを必要としません。 – fourdam

0

私は同じ問題がありました。使用していた特定のコントロールのOnPreRenderイベントにコードを追加し、作業を開始しました。

関連する問題