ASP.NET多个触发器无法正常工作

时间:2013-10-28 09:11:42

标签: asp.net asynchronous timer

我正在使用updatepanel和一些触发器实现一个页面。

我想要实现的内容如下。

  1. Timer(timer1)每隔10秒更新一次UpdatePanel(update_content)。

  2. 如果User处理RadioButtonList(rbl_axis),ListBox(list_point), 立即更新UpdatePanel。

  3. 所有更新均由异步

  4. 进行

    这是我的代码。

    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server" type="text/C#">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                div_title.InnerText= "Hello";
    
                ScriptManager1.RegisterAsyncPostBackControl(rbl_axis);
                ScriptManager1.RegisterAsyncPostBackControl(list_point);
                printTime("Page_Load");
    
            }   
        }
    
        protected void printTime(string message)
        {
            div_content.InnerHtml += message +": "+ DateTime.Now.ToLongTimeString() + "<br />";
        }
    
        protected void Timer1_Tick(object sender, EventArgs e)
        {
            printTime("<font color='red'>Timer</font>");
        }
    
        protected void rbl_axis_SelectedIndexChanged(object sender, EventArgs e)
        {
            printTime("Axis("+rbl_axis.SelectedValue+")");
        }
    
        protected void list_point_SelectedIndexChanged(object sender, EventArgs e)
        {
            printTime(list_point.SelectedValue);
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <div>
            <form id="form1" runat="server">
    
                <asp:RadioButtonList ID="rbl_axis" runat="server" RepeatDirection="Horizontal" 
                    OnSelectedIndexChanged="rbl_axis_SelectedIndexChanged">
                    <asp:ListItem Text="X" Value="X" Selected="True"></asp:ListItem>
                    <asp:ListItem Text="Y" Value="Y" ></asp:ListItem>
                    <asp:ListItem Text="Z" Value="Z" ></asp:ListItem>
                </asp:RadioButtonList>
    
                <asp:ListBox ID="list_point" runat="server" SelectionMode="Multiple" Width="100px" Height="100px"
                    OnSelectedIndexChanged="list_point_SelectedIndexChanged">
                    <asp:ListItem Text="Point1" Value="Point1"></asp:ListItem>
                    <asp:ListItem Text="Point2" Value="Point2"></asp:ListItem>
                    <asp:ListItem Text="Point3" Value="Point3"></asp:ListItem>
                    <asp:ListItem Text="Point4" Value="Point4"></asp:ListItem>
                    <asp:ListItem Text="Point5" Value="Point5"></asp:ListItem>
                </asp:ListBox>
    
                <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
                <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="10000"></asp:Timer>
    
                <asp:UpdatePanel ID="update_content" runat="server">
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
                    </Triggers>
    
                    <ContentTemplate>
                        <div id="div_title" runat="server"></div>
                        <div id="div_content" runat="server"></div>
                    </ContentTemplate>
    
                </asp:UpdatePanel>
            </form>
        </div>
    </body>
    </html>
    

    它无法正常工作。

    仅通过计时器更新面板更新。

    如果我处理列表框和单选按钮控件,则“更新”面板不会更新。

    在下一个Timer Tick中,应用列表框和单选按钮控件的修改。

    我如何实现我想要的东西。

    你能给我一些建议吗?

    提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的RadioButtonList和ListBox都必须将AutoPostBack属性设置为true才能触发回发。

此外,您需要将这些回发事件注册到UpdatePanel,就像使用Timer Click事件一样。

例如,您的代码可能更像是这样:

<asp:RadioButtonList ID="rbl_axis" runat="server" RepeatDirection="Horizontal"
     OnSelectedIndexChanged="rbl_axis_SelectedIndexChanged" AutoPostBack="true">
    <asp:ListItem Text="X" Value="X" Selected="True"></asp:ListItem>
    <asp:ListItem Text="Y" Value="Y" ></asp:ListItem>
    <asp:ListItem Text="Z" Value="Z" ></asp:ListItem>
</asp:RadioButtonList>
<asp:ListBox ID="list_point" runat="server" SelectionMode="Multiple" Width="100px"
    Height="100px" OnSelectedIndexChanged="list_point_SelectedIndexChanged"
    AutoPostBack="true">
    <asp:ListItem Text="Point1" Value="Point1"></asp:ListItem>
    <asp:ListItem Text="Point2" Value="Point2"></asp:ListItem>
    <asp:ListItem Text="Point3" Value="Point3"></asp:ListItem>
    <asp:ListItem Text="Point4" Value="Point4"></asp:ListItem>
    <asp:ListItem Text="Point5" Value="Point5"></asp:ListItem>
</asp:ListBox>
<asp:UpdatePanel ID="update_content" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
        <asp:AsyncPostBackTrigger ControlID="rbl_axis" EventName="SelectedIndexChanged" />
        <asp:AsyncPostBackTrigger ControlID="list_point" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <div id="div_title" runat="server"></div>
        <div id="div_content" runat="server"></div>
    </ContentTemplate>
</asp:UpdatePanel>