2012-02-02 2 views
0

私はしばらくの間苦労していた問題があります。あるコントロールから別のコントロールに値を転送することに関する問題があります。ascxコントロールに値を格納して転送する

基本的に2つの.ascxコントロールがあります。コントロール1:私はtxtEmailと呼ばれる電子メールテキストボックスを持っています。 txtEmailは電子メールをSQLテーブルに保存するために使用され、更新ボタンをクリックすると、電子メールテキストボックスを持つControl2も読み込まれます。私はcontrol1のemailtextボックスがcontrol2のemailテキストボックスで利用できるようにする必要があります。

私はあらゆる種類の方法を試しましたが、役に立たないです。私はデリゲートとイベントを使ってみましたが、それを動作させることはできません。

どのように私はこれを行うことができます知っていますか?

よろしく

コードの下に見つけてください:

public event EventHandler Notify; 
    public string Email 
    { 
     get { return txtEmail.Text; } 
     set {Email= value ; } 
    } 

//

protected void btnUpdateDB_Click(object sender, EventArgs e) 
    { 
     var email = txtEmail.Text.ToString(); 
     public BaseClass.BAL.MBAL m = new BaseClass.BAL.MBAL(); 
     var s = new BaseClass.Controllers.m(); 
     s.email=email; 
     if(m.save(s)!=0) txtMsave.Text="Saved...."; 

} 





//second control 


public void notifyEmailChange(object sender,EventArgs e) 
    { 
     txtUsername.Text = member1.Email; 
    } 



protected void Page_Load(object sender, EventArgs e) 
    { 

     if(Page.IsPostBack) 
     { 
      member1.Notify += new EventHandler(notifyEmailChange);  

      } 

    } 

    public string email { 
    set { txtUsers.Text = value; }} 
+0

2つの電子メールアドレスが同じであることを確認するためにバリデーターを必要としていませんか? – Ben

+0

Ben、それは間違っているならば、無作為のパスワードを作成するためにcontrol1.emailが使用されるので、必要ではありません。そして、ログインに必要なパスワードを受け取りません。それは何とか別の設定です。基本的には、既知の人々(つまり、会社の従業員またはスカウトのような特定の組織のメンバー)が使用するはずのソフトウェアです。 –

答えて

1

は、たぶん私は問題をtrivializingていますが、あなたが欠けている場合は、更新を処理するボタン各カスタムコントロールのテキストボックスを読み書きできるようにするには、2つのコントロールのそれぞれのテキストボックスを読み書きするパブリックプロパティを作成します。

public string EmailAddress { 
     get { 
      return txtEmailAddress.Text; 
     } 
     set { 
      txtEmailAddress.Text = value; 
     } 
    } 

ここで、2つのコントロールを含むページは、最初のコントロールから電子メールアドレスを読み取り、2番目のコントロールの電子メールアドレステキストボックスに書き込むことができます。

問題を誤解している場合は、教えてください。私は過去にこれを行っている

+0

Hi Zac、あなたの答えは、コントロールがロードされているため単純には機能しませんポストバック時にはその文字列は空になります。 –

+0

asp.netは、データ、クエリ文字列、ビューの状態、およびセッションを保持するための複数のメカニズムを提供しています。これらのメカニズムはすべて、ポストバックを通じて文字列を保持します。 –

+0

こんにちはザック、私もそれらを試してみましたが、何らかの理由で彼らはすべて空だったと言って、セッション["txtemail"] = txtemail.text;それを他のコントロールで呼び出すことはできませんでした。私もhttpcontextを使用していましたが、空であったので、カスタムコントロールを使用しているためだと思っていました –

1

方法は

  1. のUserControl1は、(例えば)と呼ばれるカスタムイベント通知を持っていることです。「
  2. 含む制御ワイヤはEventHandlerの
  3. (更新の)火災を知らせる消費するイベントハンドラの火災に通知し、このイベントハンドラは

がoverengineeredに思えるかもしれないUserControl2を上の電子メールを更新しますがので、UserControl2を缶tが私はこれが

のUserControl1で

を移動するための方法だと思うのUserControl1 "を参照してください。"
public event EventHandler Notify; 

と更新ボタンのクリックイベントハンドラ内

if(Notify != null) 
{ 
    Notify(this, new EventArgs()); 
} 

親コントロールで

をPage_Load

ucUserControl2.Notify += new EventHandler(NotifyUserControl); 

とメッセージ

protected void NotifyUserControl(object sender, EventArgs args) 
{ 
    ucUserControl2.Email = ucUserControl1.Email; 
} 
を設定するには

あなたは明らかに、UserControlsのパブリックプロパティが電子メールのテキストを公開する必要があります

関連する問題