2012-01-11 6 views
1

私は1日に学生に時間を割り当てるウェブアプリケーションを持っています。スケジューラの一種。asp.netでusercontrolの値にアクセスする方法

このため、ユーザーコントロールはTimePeriodであり、このコントロールはWebページに動的に読み込まれます。

しかし、ページ上のそのユーザーコントロールの数はこれに応じて変化します。私はユーザーコントロールを動的に作成するコードを持っています。例の目的のために

私は実際にそれが はこのように見える変化し、2までのi値を設定している:ユーザーがすべての日のための時間のための変更が完了した場合

for(int i=0;i<2;i++) 
{ 
    TimePeriod ib = (TimePeriod)LoadControl("TimePeriod.ascx"); 
    //ib.RightArrowImgUrl = "~/images/wcm-circle-arrow-button.png"; 
    span_tempList.Controls.Add(ib); 

} 

。つまり、ページ上のすべてのユーザーコントロールで実行されます。

このページには、この変更をデータベースに取り込むボタンがあります。

しかし、ここでは、ページからこれらのテキストボックス値の値にアクセスする方法が、HTMLとしてレンダリングされているために発生します。

これは私のユーザーコントロールのコードです:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TimePeriod.ascx.cs" Inherits="ClassManagment.TimePeriod" %> 


<div> 
    <asp:TextBox ID="time3" size="10" value="08:00" runat="server"></asp:TextBox><asp:TextBox ID="time4" size="10" value="09:00" runat="server"></asp:TextBox> 

</div> 

コード、ユーザーコントロールの後ろに---:--------私は、ユーザーコントロールの値にアクセスするにはどうすればよい

public partial class TimePeriod : System.Web.UI.UserControl 
{ 
     protected global::System.Web.UI.WebControls.TextBox time3 = new System.Web.UI.WebControls.TextBox(); 
     protected global::System.Web.UI.WebControls.TextBox time4 = new System.Web.UI.WebControls.TextBox(); 


     public string TimeFrom 
     { 
      get { return time3.Text; } 
      set { time3.Text = value; } 
     } 

     public string TimeTo 
     { 
      get { return time4.Text; } 
      set { time4.Text = value; } 
     } 
} 

?そのような

答えて

1

:ボタンのクリックハンドラで

TimePeriod ib = (TimePeriod)LoadControl("TimePeriod.ascx"); 
string timeTo = ib.TimeTo; 
string timeFrom = ib.TimeFrom; 
+0

ページに動的に追加されたコントロールをフィールドに配置してから、通常のオブジェクトとしてアクセスすることができます。 – ivowiblo

+0

これは間違いなく、コントロールを動的に作成するときには、OnInitページイベントでコントロールを再作成して値を取得する必要があります。 – IamStalker

+0

また、イベントを発生させるために。つまり、ユーザーコントロールがテキストボックスのクリックイベントに登録されています。 – ivowiblo

1

、あなたのクラスであなたの動的に生成されたユーザーコントロールのグローバル配列を維持し、それらにアクセスし、この

string timeFrom = null; 
string timeTo = null; 

foreach (Control control in span_tempList.Controls) 
{ 
    if (control is TimePeriod) 
    { 
     timeFrom = ((TimePeriod)control).TimeFrom.Text; 
     timeTo = ((TimePeriod)control).TimeTo.Text; 
     // Do something with these values 
    } 
} 
+0

このコードを試してみると、次のようなエラーが表示されます: ** 'System.Web.UI.LiteralControl'タイプのオブジェクトを 'ClassManagment.TimePeriod'にキャストすることができません。** この行で----- --------: TimeFrom =((TimePeriod)コントロール).TimeFrom; – sharad

+0

@ user1118932:コードにバグが見つかりましたが、貼り付けたものとは関係ありません。それが何であるかを見るためにもう一度試してください。 –

+0

'span_tempList'の中には、それが示すTimePeriodはありません。 HTMLにレンダリングされた後、TimePeriodが何であるかわかりません。上記のコードはすべてリテラルです。 – sharad

0

のようなものを持つことができます

public partial class Foo : System.Web.UI.Page 
{ 

    TimePeriod [] timePeriodArray = new TimePeriod[2]; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    for(int i=0;i<2;i++) 
    { 
     TimePeriod ib = (TimePeriod)LoadControl("TimePeriod.ascx"); 
     span_tempList.Controls.Add(ib); 
     timePeriodArray[i] = ib; 
    } 

    } 

次のようにインスタンスを直接格納します。それらのインスタンスを直接実行します。

関連する問題