1

LinkButtonページのどちらがクリックされたかを確認するにはどうすればよいですかPage_Load。これは、サービスの呼び出しを回避して、そのイベントに存在するもののみを実行するためです。

4

6 に答える 6

7

で実行する必要があるのは、すべてPage_Loadのリクエストで常に発生させたいコード、またはポストバックチェックでラップされたときにのみ実行したいコードだけです。例えば:

protected void Page_Load(object sender, EventArgs e)
{
    // Put the all code you need to run with EVERY request here

    // Then add a post back check for any code you want to ONLY run on the very
    // first request to the page.
    if (!IsPostBack)
    {
        // Code you only want to run the first time.  Usually setup code to initalize
        // DropDownLists, Grids or pre populate a form, etc...
    }
}

LinkButtonコードは、クリックハンドラー内ですべて独自のものである必要があります。

protected void yourLinkButton_Click(object sender, EventArgs e)
{
    // code you want to execute when your button is clicked.  This will run AFTER
    // the Page_Load has finished.
}

ここで、LinkButtonを使用する場合GridViewRepeaterまたはそれを入力するためにバインディングを必要とするある種のコントロールで使用する場合は、どちらが押さRowCommandれているかを把握するためにイベントハンドラーを実装する必要があります。LinkButtonデータをそのプロパティにバインドしてCommandArgument、一意の行固有のデータを偶数ハンドラーに渡すこともできます。

LinkButtonすべてがまったく同じハンドラーを使用している場合、最悪のシナリオは、をキャストしてから値senderを比較するIDことです。

protected void yourLinkButton_Click(object sender, EventArgs e)
{
    LinkButton btn = (LinkButton)(sender);
    if (btn.ID.Equals("Some control name you want to compare"))
    {
        // do something
    }
}

私があなたの質問のマークから外れている場合は、コメントを残してください。私はそれを整理しようとします。

編集:あなたのコメントに基づいて、他のいくつかの制約Buttonのためにそれがどれにあるかを知る必要があるように思えます。Page_Loadまあ、それを行うためのきれいな方法はありませんが、それは行うPage_Loadことができます。Request.Formキーをチェックし、特定のボタン名をチェックする必要があります(Buttonクリックされたものだけがキーに含まれる必要があります)。例えば:

if (Request.Form.AllKeys.Contains("yourButton1"))
{
    // then do something based on yourButton1
}
else if (Request.Form.AllKeys.Contains("yourButton2"))
{
    // then do something based on yourButton2
}
// etc...

私はそれを回避する他のクリーンな方法はないと思います。senderフレームワークに、プロパティの1つにポストバックを引き起こすコントロールが含まれていれば良かったでしょう。

別の編集:これは完全に私の心を滑らせました。Button上記の編集は、データが入力されていないため、行う必要がありました__EVENTTARGET。を使用しているのでLinkButton、以下を使用して、ポストバックの原因となったコントロールを取得できます。

string controlNameThatCausedPostBack = Request.Form["__EVENTTARGET"];

私はこれをaでテストしましたがLinkButton、期待どおりに機能します。

それが最終的にあなたの問題を解決することを願っています:)

于 2010-08-23T21:15:16.403 に答える
1
protected void Page_Load(object sender, EventArgs e)
{
  if (IsPostBack && Request.Form["__EVENTTARGET"] == LinkButton1.UniqueID) 
  {
    // LinkButton1 was clicked
  }
}
于 2012-05-18T07:22:46.883 に答える
1

イベントハンドラでは遅すぎたので、私はこれをしなければなりませんでした。JavaScript を使用して、クリックされたボタンの ID を隠しフィールドに書き込むことができます。Page_Loadで取得できます。他の方法は、私の記憶が正しければ、_EVENTTARGET 隠しフィールドを調べることです。

于 2010-08-23T20:27:32.610 に答える
0

ここに移動するには個別のハンドラーを使用しますが、各ボタンに一意のItemCommandプロパティを指定し、必要に応じてそれらをフィルター処理することができます。

于 2010-08-23T21:26:45.143 に答える
0

ページで他のポストバック イベントが発生したときに Page_Load コードが実行されないようにしようとしているということですか? その場合は、次のようにラップします。

if (!IsPostBack)

(私見ですが、これは WebForms イベント モデルによって必要とされるちょっとしたハックですが、実際にはそうなっています。)

それとも私はあなたの質問を誤解していますか?

特定の LinkBut​​ton を識別するには、CommandName パラメータを使用できます。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandname.aspx

于 2010-08-23T20:22:56.047 に答える
0

また、タイプ LinkBut​​ton (または Control など) の変数を宣言し、クリック イベントで自分自身への参照を使用してボタンを更新し、Load で値をチェックすることもできます。

于 2010-08-23T20:27:56.500 に答える