0

私はusercontrol1のaspxを持っていて、usercontrol1の中にusercontrol2があります。usercontrol2にはボタンがあります。このボタンがクリックされたときに発生したいのは、ポストバックで、aspxのpage_loadイベントに行く前に最初にbutton_clickイベントを発生させたいということです。これは可能ですか?aspx の page_load イベントでポストバックすると、ユーザーを別のページにリダイレクトするため、最初に button_click イベントを発生させる必要があります。したがって、ユーザーをリダイレクトする前に、ユーザーが usercontrol2 に入力したデータを取得する必要があります。私はイベントとデリゲートの作成について多くのことを読みましたが、私のような初心者にとってはよく理解できません。これについてどうすればよいか教えてください。

更新: addhandler を使用して aspx ページでユーザーを検証する前に button_click イベントを発生させ、イベントを発生させることができましたが、問題は何も値を取得していないことです。ポストデータを使用することを考えています(これはポストバックで発生するため)が、どのように、そしてそれが正しい方法なのかわかりませんか? 助けてください、以下はコードです

ASPX の場合:

Public Event ShoppingCartClick As EventHandler
Private userControl As userControl2

Protected Overrides Sub OnInit(e As EventArgs)
    AddHandler ShoppingCartClick, AddressOf userControl2.btnShoppingCart_Click
    MyBase.OnInit(e)
End Sub

If IsPostBack Then
   RaiseEvent ShoppingCartClick(sender, e)
   If MyBase.CurrentWebUser.IsLoggedIn Then
      Response.Redirect("ShoppingCart.aspx")
   Else
      Response.Redirect("Login.aspx")
   End If
End If
4

2 に答える 2

0

コメントからの回答として追加されました。

ボタン クリックがページ読み込みの前に処理されるように通常のページ ライフサイクルを変更しようとする代わりに、ロジックをページ読み込みから後のイベントに移動して、ボタン クリックが最初に処理されるようにします。

OnPageLoaded は、init、load、およびイベント ハンドラー イベントの後、レンダリング イベントの前に発生します。これは良い場所かもしれません。

ページのライフサイクル情報の良い出発点です。

于 2014-05-28T16:46:35.537 に答える
0

Button のクリック イベントで、Reflection を使用して上記で説明した Parent Page メソッドを呼び出し、テキスト ボックスの値をメソッドに渡すと、メソッドが呼び出され、メッセージが画面に表示されます。

子ユーザー コントロール:

protected void btnSend_Click(object sender, EventArgs e)
{
this.Page.GetType().InvokeMember("DisplayMessage", System.Reflection.BindingFlags.InvokeMethod,     null, this.Page, new object[] { txtMessage.Text });
}

親ページには、DisplayMessage メソッドがあります。

public void DisplayMessage(string textToDisplay)
{
    //DOWORK
}

何かを設定する必要がある場合は、これを行うだけです。たとえば、親のテキストボックスにアクセスする必要があります

TextBox txt= this.Parent.FindControl("txtVisitorName") as TextBox;
于 2014-05-27T22:52:19.590 に答える