C# LinkButton在UpdatePanel中不工作

C# LinkButton在UpdatePanel中不工作,c#,asp.net,updatepanel,linkbutton,C#,Asp.net,Updatepanel,Linkbutton,我正在构建一个报价数据表(想想股票报价表),它需要每5秒刷新一次。每一行在几列中有一些关于一只股票的数据,每一行的最后一列有一个LinkButton,以查看有关该特定股票的更多信息。除了链接按钮,其他一切都可以正常工作。整个表嵌套在一个UpdatePanel中,我认为这是导致问题的原因。我看过很多关于这个话题的帖子,但没有一篇对我有用 这是我的.aspx代码: <asp:ScriptManager ID="ScriptManager" runat="server" /> <as

我正在构建一个报价数据表(想想股票报价表),它需要每5秒刷新一次。每一行在几列中有一些关于一只股票的数据,每一行的最后一列有一个
LinkButton
,以查看有关该特定股票的更多信息。除了
链接按钮
,其他一切都可以正常工作。整个表嵌套在一个
UpdatePanel
中,我认为这是导致问题的原因。我看过很多关于这个话题的帖子,但没有一篇对我有用

这是我的.aspx代码:

<asp:ScriptManager ID="ScriptManager" runat="server" />
<asp:Timer ID="Timer" OnTick="Timer_Tick" runat="server" Interval="5000" />

<div id="itemList">
    <asp:UpdatePanel ID="itemPanel" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server">
        <Triggers><asp:AsyncPostBackTrigger ControlID="Timer" /></Triggers>
        <ContentTemplate>    
                <asp:Panel ID="Panel_ItemList" runat="server" width="100%"></asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

和my.aspx.cs代码:

protected void Page_Load(object sender, EventArgs e)
{
    ...

    if (!Page.IsPostBack) 
    {
        updateItemsTable();
    }
}

protected void LinkButton_Click(object sender, CommandEventArgs e)
{
        Panel_LoginAlert.Visible = true;    // <-- THIS IS NOT FIRING!!
}

protected void Timer_Tick(object sender, EventArgs e)
{
    updateItemsTable();
}

protected void updateItemsTable()
{
    //... Query my DB

        if (rdr.HasRows)
        {
            Panel_ItemList.Controls.Add(new LiteralControl("<!-- ItemList Panel -->\n"));

            while (rdr.Read())
            {
                LinkButton lb = new LinkButton();
                lb.Text = "Item";
                lb.ID = "lbItem_" + strDBitemID;
                lb.CommandName = strDBitemName;
                lb.CommandArgument = strDBitemID;
                lb.Command += new CommandEventHandler(LinkButton_Click);
                Panel_ItemList.Controls.Add(lb);
            }
            Panel_ItemList.Controls.Add(new LiteralControl("<!-- END ItemList Panel -->\n"));
        }
    //...
    conn.Close();
}
受保护的无效页面加载(对象发送方,事件参数e)
{
...
如果(!Page.IsPostBack)
{
updateItemsTable();
}
}
受保护的无效链接按钮\u单击(对象发送者,CommandEventArgs e)
{

Panel_LoginAlert.Visible=true;//我认为问题在于添加控件时。要使其正常工作,需要在Init事件中添加服务器控件,或覆盖OnInit(EventArgs)

不必显式地创建控件,您可以用一个中继器替换面板,然后将结果从数据库绑定到读卡器

<asp:Repeater ID="TheRepeater" ...>
   <ItemTemplate>
      <asp:LinkButton onClick="LinkButton_Click" ...bind values to properties here />
   </ItemTemplate>
</asp:Repeater>

也就是说,如果您只想更改UI,那么使用jquery就可以轻松完成。

我认为问题在于添加控件时。要实现这一点,需要在Init事件中添加服务器控件,或者覆盖OnInit(EventArgs)

不必显式地创建控件,您可以用一个中继器替换面板,然后将结果从数据库绑定到读卡器

<asp:Repeater ID="TheRepeater" ...>
   <ItemTemplate>
      <asp:LinkButton onClick="LinkButton_Click" ...bind values to properties here />
   </ItemTemplate>
</asp:Repeater>

也就是说,如果您只想更改UI,那么使用jquery就可以很容易地完成。

我认为问题在于页面生命周期,因为您正在创建一个动态控件,并在
page\u init
page\u load
之后添加事件,它无法正确连接到控件,您可以尝试执行以下操作并查看其是否有效:

添加页面初始化:

protected void Page_Init(object sender, EventArgs e)
{
    updateItemsTable();
}
并将计时器滴答声事件更改为:

protected void Timer_Tick(object sender, EventArgs e)
{
   itemPanel.Update();
}
这就应该奏效了

希望这能有所帮助


干杯。

我相信问题出在页面生命周期中,因为您正在创建一个动态控件,并在
页面初始化
页面加载
之后添加事件,它没有正确连接到控件,所以您可以尝试以下方法,看看是否有效:

添加页面初始化:

protected void Page_Init(object sender, EventArgs e)
{
    updateItemsTable();
}
并将计时器滴答声事件更改为:

protected void Timer_Tick(object sender, EventArgs e)
{
   itemPanel.Update();
}
这就应该奏效了

希望这能有所帮助


干杯。

您需要添加回发触发器,如下所示:

<asp:PostBackTrigger ControlID="SearchBrn"/>

您需要添加回发触发器,如下所示:

<asp:PostBackTrigger ControlID="SearchBrn"/>


如果您试图使用链接按钮隐藏面板,您可以在javascript中执行此操作。如果您试图使用链接按钮隐藏面板,您可以在javascript中执行此操作。