3

ページ全体を更新したい更新パネル内にボタンがあります。と を設定ChildrenAsTriggers="false"UpdateMode="Conditional"ました。

ここに私の問題を示すサンプルコードがあります。

<asp:UpdatePanel ID="myFirstPanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:Button runat="server" ID="myFirstButton" Text="My First Button" onclick="myFirstButton_Click" />
      <asp:Button runat="server" ID="mySecondButton" Text="My Second Button" onclick="mySecondButton_Click" />
   </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="mySecondPanel" runat="server">
   <ContentTemplate>
       <asp:Label runat="server" ID="myFirstLabel" Text="My First Label"></asp:Label>
    </ContentTemplate>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="myFirstButton" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Label runat="server" ID="mySecondLabel" Text="My Second Label"></asp:Label>

そして背後にあるコード:

protected void myFirstButton_Click(object sender, EventArgs e)
{
  myFirstLabel.Text = "Inside Panel " + DateTime.Now.ToString("mm:ss");
}
protected void mySecondButton_Click(object sender, EventArgs e)
{
  mySecondLabel.Text = "Outside Panel " + DateTime.Now.ToString("mm:ss");
}

2 番目のボタンがクリックされたときに更新パネル内にないラベルを更新したい。2 番目のボタンは更新パネルにある必要があります。ラベルを更新パネルに入れたくありません。

4

6 に答える 6

6

2 番目のボタンの最初の UpdatePanel に PostBackTrigger を追加してみてください。これにより、ボタンが完全なポストバックを作成する必要があることが更新パネルに通知されます。

于 2008-10-21T12:51:18.780 に答える
4

ScriptManager.GetCurrent(Page).RegisterPostBackControl(button); あなたの問題を解決します

于 2008-10-21T13:01:56.310 に答える
1

このように最初の更新パネルに PostBackTrigger を追加すると、

<Triggers>
   <asp:PostBackTrigger ControlID="mySecondButton" />
</Triggers>

これにより、2 番目のボタンがクリックされたときに完全なポスト バックが発生します。これはまさに私が探していた動作です。

于 2008-10-21T12:51:24.553 に答える
0

同様のケースがありましたが、少し複雑で、この答えを理解するのに 1 日以上かかりました。(答えは本質的に@serkanによって与えられたものと同じです。私はそれを拡張しているだけです。)クリックすると画像を生成し、画像のダウンロードをトリガーするボタンを持つASP.NETユーザーコントロールがありました。 . これは通常のページではうまく機能しましたが、ユーザー コントロールが更新パネルに埋め込まれている場合はまったく機能しませんでした。特にボタンがユーザーコントロール内にあり、それを使用するページからボタンに明らかなアクセスがないため、このボタンのみに対して通常のポストバックを行うように更新パネルに指示する方法を理解できませんでした。

最終的に機能したのは非常に単純です。パネルのポストバック トリガーを指定する必要はありませんでした。代わりに、ユーザー コントロールの Page_Load に、次を追加しました。

    protected void Page_Load(object sender, EventArgs e)
    {
        // If the chart is within an update panel then we need to tell the script manager
        // to not do an asynch postback on chartdownload.  If we don't, the download
        // doesn't work.
        var scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null)
        {
            scriptManager.RegisterPostBackControl(ChartSaveButton);
        }
        // Rest of Page_Load followed here...

さらにChartSaveButton、ボタンのコントロールに簡単にアクセスできるようにプロパティを作成しました。

    private Control ChartSaveButton
    {
        get { return FindControl("btnDownloadChart"); }
    }

(「btnDownloadChart」はボタンのIDです。)

ここにたどり着くのは大変な道のりでしたが、ソリューションが非常にエレガントであることに満足しています。これがお役に立てば幸いです。

于 2012-10-17T20:48:31.990 に答える
-1

私には、この設定は意味がありません。更新パネルは、非常に簡単に ajax のような効果を実現する優れた方法ですが、すべての状況で理想的であるとは限りません。

例のようにページ アーキテクチャで要素の配置が必要な場合は、javascript でページまたはサービス メソッドを使用してラベルを更新することを検討することをお勧めします。

于 2008-10-21T12:49:59.750 に答える
-2

ラベルが更新パネルにない場合、値を更新する唯一の方法は、通常のポストバックのようにページ全体を更新することです。更新するには、同じページにリダイレクトする必要があります。ajax フレームワークは、リクエストが更新パネルからのものであってもリダイレクトを処理することを認識しているため、ボタンのクリック時に Response.Redirect(...) を実行するだけです。

于 2008-10-21T12:24:00.770 に答える