マルチビューを使用していくつかのチャートを表示します。最初の読み込み時に、ページには 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";
}
}