私はaspxページを持っています。私は、動的にプレースホルダにWebユーザコントロールを追加しています。私は1つのユーザーコントロールのキャンセルボタンがあり、そのキャンセルボタンをクリックすると、aspxページ(プレースホルダー)内の他のユーザーコントロールをロードしたいと知っています。Webユーザコントロールから親aspxページの機能を呼び出す
私はusercontrolでイベントハンドラを作成してnullになるとどうすればいいですか?
おかげ
私はaspxページを持っています。私は、動的にプレースホルダにWebユーザコントロールを追加しています。私は1つのユーザーコントロールのキャンセルボタンがあり、そのキャンセルボタンをクリックすると、aspxページ(プレースホルダー)内の他のユーザーコントロールをロードしたいと知っています。Webユーザコントロールから親aspxページの機能を呼び出す
私はusercontrolでイベントハンドラを作成してnullになるとどうすればいいですか?
おかげ
ユーザーコントロールは、ページが存在する場所に決して依存することはありません。コントロールにイベントを追加し、キャンセルボタンイベントハンドラから発生させます。
public event EventHandler CancelClicked;
protected Cancel_Click(object sender, EventArgs e)
{
if(CancelClicked != null)
{
CancelClicked(this, e);
}
}
ページから、コントロールのCancelClickedイベントを購読し、その他のユーザーコントロールで実行する操作を行います。
タイトカップリングについてのコメントは+1です。 – seanxe
@Anders Abel私はすでにこのようにしています。私の場合、デバッガはif(CancelClicked!= null)の中に決して入力していません。 { CancelClicked(this、e); } 私のcancelclickedは常にnullであるため –
コントロールをページに追加すると、OnCancelClickedでイベントハンドラを登録する必要があります。コントロールの定義は次のようになります。 '
私はこれを達成するための最良の方法は、あなたはそれが通信する必要がある場合、そのページにあなたがこのイベントを購読することができ解雇されたユーザーコントロールでイベントを作成すると考えています。
ユーザーコントロール
イベント変数として、あなたのコントロールでこれを入れてください。キャンセルボタンのクリックイベントで次に
public event EventHandler CancelRequested;
:
CancelRequested(this, new CommandEventArgs("CancelClicked", SomeVariable));
ページ(または親)あなたが動的に追加するとき
が続いて(このような親ページ内のイベントにサブスクライブそれ):
ctrlYourControl.CancelRequested += new EventHandler(ctrlYourControl_CancelRequested);
イベントを宣言するハンドラ:
void ctrlYourControl_CancelRequested(object sender, EventArgs e)
{
// display other user control
}
は、ユーザーコントロールにこのイベントを追加します。
public event EventHandler CancelClicked;
今、あなたの親aspxページでこの方法。
public void OnCancelClicked (object sender, EventArgs data)
{
// do your stuffs like loading other controls and
// whatever when event fired
}
あなたが動的にユーザーコントロールをロードしている、この追加:これが何をすべき
public void btnCancel_Click(object sender, EventArgs e)
{
if(CancelClicked != null)
{
CancelClicked(this, e);
}
}
:
var someControl = LoadControl(@"~\SomeControl.ascx") as SomeControl;
someControl.CancelClicked += new EventHandler(OnCancelClicked);
そして、あなたのユーザーコントロール上を!
動的にページにユーザーコントロールを追加する場所のコードを表示できますか。 – Jamiec
あなたのコントロールはあなたのページを知るべきではありません。 – Oded