0

マルチビューを使用していくつかのチャートを表示します。最初の読み込み時に、ページには 2 つのドロップダウンと GO ボタンが表示されます。コード ビハインドを使用して、ドロップダウンからの選択に基づいて表示するビューを選択します。

ページには、ユーザーが自動更新を停止できるボタンを使用した AJAX 更新があります。ボタンはタイマーを無効にし、ボタンのテキストを変更し、イタリック体にし、ボタン自体を無効にします。これはうまくいきます。

ユーザーがオプションを選択して GO を押すと、要求されたビューが表示されます。自動更新をオンにする方法を許可していません。純粋に自分にとって気楽ではありません。最も簡単な方法は、ユーザーが [GO] ボタンをもう一度押すことを許可することだと思いました (現在のビューを管理する選択はドロップダウンで選択されたままです)。これにより、デフォルトで自動更新が有効になっているビューがリロードされます。

以下は、私が現在持っているものの本質的なコードであり、デモンストレーションするビューは 1 つだけです。

ASP.NET

<asp:Content ID="HeadContent" runat="server" ContentPlaceHolderID="HeadContent">
    <script type="text/javascript">
        function SetText(id) {
            if (id.value == "Disable automatic page refresh")
                id.value = "Processing Request ...";
        }
    </script>
</asp:Content>

<asp:DropDownList ID="itemDropdown" runat="server">
            ASP LIST ITEMS
</asp:DropDownList>
<asp:DropDownList ID="timeDropdown" runat="server">
            ASP LIST ITEMS
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Go" OnClick="Button1_Click" />
</p>
<p>
    <asp:Label ID="errorLabel" runat="server" CssClass="errorLabel"></asp:Label>
</p>

<asp:MultiView ID="MultiView1" runat="server">
    <asp:View ID="View1" runat="server">
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" ViewStateMode="Enabled" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button ID="Button2" runat="server" Text="Disable automatic page refresh" OnClick="Button2_Click" OnClientClick="return SetText(this)" /></p>
        CONTENT HERE
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
            </Triggers>
        </asp:UpdatePanel>
        <asp:Timer ID="Timer1" runat="server" Interval="60000">
        </asp:Timer>
    </asp:View>

コードビハインド

protected void Button1_Click(object sender, EventArgs e)
{    
    if (errorLabel.Text != null)
    {
        errorLabel.Text = string.Empty;
    }

    if (itemDropdown.SelectedValue == "5" && timeDropdown.SelectedValue == "0.5")
    {
        MultiView1.ActiveViewIndex = 0;
        UpdatePanel1.Update();
    }
    IF CONTINUES ...
    else
    {
        errorLabel.Text = "You did not choose a valid Item or Timeframe.  Please try again.";
    }
}

protected void Button2_Click(object sender, EventArgs e)
{
    Timer1.Enabled = false;
    Button2.Text = "Automatic Refresh Disabled";
    Button2.Font.Italic = true;
    Button2.Enabled = false;
}

私の問題は、[GO] ボタンをクリックすると、更新されたボタン条件がまだ有効になっていることです。すなわち。名前が変更され、イタリック体になり、無効になります。ビューを強制的に完全にリロードする方法はありますか? これが理にかなっていることを願っています。UpdatePanel1.Update(); を試しました。上記の Button1_Click メソッドで見られるように、うまくいきませんでした。

Ann Lの提案を使用して、次のことを試しましたが、どれもうまくいきませんでした:

protected void Button2_Click(object sender, EventArgs e)
{
    Timer1.Enabled = false;
    Button2.Text = "Automatic Refresh Disabled";
    Button2.Font.Italic = true;
    Button2.Enabled = false;

    Timer1.Enabled = true;
    Timer1.Interval = 10000;
    Button2.Text = "Disable automatic page refresh";
    Button2.Font.Italic = false;
    Button2.Enabled = true;
}

protected void Button2_Click(object sender, EventArgs e)
{
    Timer1.Enabled = true;
    Timer1.Interval = 10000;
    Button2.Text = "Disable automatic page refresh";
    Button2.Font.Italic = false;
    Button2.Enabled = true;     

    Timer1.Enabled = false;
    Button2.Text = "Automatic Refresh Disabled";
    Button2.Font.Italic = true;
    Button2.Enabled = false;
}

protected void Button2_Click(object sender, EventArgs e)
{
    if (!Button2.Enabled)
    {
        Timer1.Enabled = true;
        Timer1.Interval = 10000;
        Button2.Text = "Disable automatic page refresh";
        Button2.Font.Italic = false;
        Button2.Enabled = true;
    }
    else
    {
        Timer1.Enabled = false;
        Button2.Text = "Automatic Refresh Disabled";
        Button2.Font.Italic = true;
        Button2.Enabled = false;
        Button2.ToolTip = "Click again to resume automatic refresh";
    }
}

この問題を解決するために、コード ビハインドに次のコードを追加しました。

protected void Button2_Click(object sender, EventArgs e)
{
    if (Button2.Text == "Disable automatic page refresh")
    {
        Timer1.Enabled = false;
        Button2.Text = "Automatic Refresh Disabled";
        Button2.Font.Italic = true;
        Button2.ToolTip = "Click again to resume automatic refresh";
    }
    else
    {
        Timer1.Enabled = true;
        Timer1.Interval = 10000;
        Button2.Text = "Disable automatic page refresh";
        Button2.Font.Italic = false;
        Button2.ToolTip = "Click to disable automatic page refresh";
    }
}
4

1 に答える 1

1

OK、あなたが求めていること ( に加えられた変更を元に戻す方法Button2) を理解していると仮定すると、次のようになります。

次のコードは に入りButton1_Clickます:

if(!Button2.Enabled)
{
    Timer1.Enabled = true;  // You might also have to reset its properties
    Button2.Text = "Disable automatic refresh";
    Button2.Font.Italic = false;
    Button2.Enabled = true;
}

UpdatePanelコントロールの状態を変更していない場合、 を更新しても効果はありません。iframe やページ全体を更新するのとは異なり、ページを再レンダリングして変更を表示するだけです。値やプロパティはリセットされません。

私はUpdatePanel専門家ではありませんが、このコードをButton1_Click(これは完全なポストバックですよね?) に追加すると、再び作業を開始できるようになるはずです。

于 2012-12-18T13:38:19.677 に答える