2011-01-19 20 views
1

私はMasterPageに2つのUserControlを持っています。 DataEntryUCには、いくつかのTextBoxとDropDownListが含まれています。 NavSaveUCにはナビゲーションボタンがあります。ユーザーがナビゲーションボタンをクリックすると、NavSaveUC UserControlからDataEntryUCに入力されたデータが保存されます。別のUserControlから1つのUserControlのTextBoxを参照する方法

私はDB内に、ストアドプロシージャ名、コントロール名、コントロールタイプ、SqlDbTypesなどを含むテーブルをいくつか持っています。これらはDataEntryUCと関連しています。

NavSaveUCからDataEntryUC上のテキストボックスを参照するにはどうすればよいですか?

私は運がないNavSaveUCから次のコードに取り組んでいます。

Dim MyControlName = "txtFirstName" 
Dim MyControlType = "TextBox" 
Dim MyStringValue as String 
Dim tmpTxtControl as TextBox 
Dim tmpDdlControl as DropDownList 

Select Case MyControlType 
    Case "TextBox" 
     tmpTxtControl = CType(Page.FindControl(MyControlName, TextBox) 
     MyStringValue = tmpTxtControl.Text     
    Case "DropDownList" 
     tmpDdlControl = CType(Page.FindControl(MyControlName, DropDownList) 
     MyStringValue = tmpDdlControl.SelectedValue 
End Select 

ありがとうございます!

答えて

1

テキストボックスをユーザーコントロールのプロパティとして公開し、その方法でアクセスします。この種の依存関係はベストプラクティスではありません。

+1

はい、そのコントロールをプロパティとして公開するのは簡単で最善の方法です。その例を次に示します.http://www.dotnetcurry.com/ShowArticle.aspx?ID = 155 – AspNetDev

+0

ここに示す例に従うと、ページのソースコード内のコントロールを参照しています。 (<%@ Reference VirtualPath = "〜/ ControlB.ascx"%>)複数のuserControlに対してこのボタンナビゲーションコントロールを使用します。自分のNaveSaveUCと一緒に使用されるすべてのユーザーコントロールを参照する必要がありますか? – crjunk

+0

ボタンが存在するページ上の関連するユーザーコントロールを参照するだけです。また、ユーザーコントロールは、他の場所で使用されている場合は、手動で展開する必要があります。 – IrishChieftain

1

1つのユーザーコントロールが他のユーザーコントロール内に埋め込まれている場合は、単純にコントロールのプロパティとして公開します。ただし、両方のユーザーコントロールが同じページに別々に存在する場合、コントロール間の依存関係を避けるために、コントロールは直接相互作用してはなりません。

代わりに、2つのコントロール間の仲介としてページを使用する必要があります。たとえば、NavSaveUCは、アクションが実行されたときにイベント引数にデータを含むイベントを発生させることができます。ページはNavSaveUCのイベントを処理できます。 DataEntryUCがテキストボックスまたはテキストボックスのテキストプロパティをパブリックプロパティとして公開する場合、ページのイベントハンドラはNavSaveUCのイベント引数からデータを取得し、DataEntryUCのテキストボックスに配置できます。

関連する問題