【问题标题】:Ajax UpdatePanel inside repeater is missing post back转发器内的 Ajax UpdatePanel 缺少回发
【发布时间】:2017-12-28 05:54:59
【问题描述】:

我无法在中继器内回发 UpdatePanel。

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

<asp:Repeater ID="Posts" runat="server" OnItemCreated="Posts_OnItemCreated">
    <ItemTemplate>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
            <ContentTemplate>
                <asp:Label ID="lblComentarios" runat="server" Text='<%# Eval("LabelComentarios") %>'></asp:Label>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click"/>
            </Triggers>
        </asp:UpdatePanel>

        <asp:TextBox ID="txtComentario" runat="server" CssClass='<%# Eval("PostId") %>'></asp:TextBox>

        <asp:Button ID="Button1" ClientIDMode="Static" runat="server" OnCommand="btnComentar_OnCommand" CommandName='<%# Eval("PostId") %>' class='<%# Eval("PostId") %>' />

    </ItemTemplate>
</asp:Repeater>

中继器 OnItemCreated() 的代码:

protected void Posts_OnItemCreated(object sender, RepeaterItemEventArgs e)
{
    var control = e.Item.FindControl("Button1");
    ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(control);
}

然后在我的代码隐藏 OnCommand ..

protected void btnComentar_OnCommand(object sender, CommandEventArgs e)
{
    MyCode();
    foreach (RepeaterItem item in Posts.Items)
    {
        var panel = (UpdatePanel)item.FindControl("UpdatePanel1");
        panel.Update();
    }
}            

除了 panel.update() 之外,一切都在做它应该做的事情。

【问题讨论】:

  • hmm.. 所以btnComentar_OnCommand 没有触发?
  • 它正在执行我拥有的所有代码。但不刷新内容模板

标签: c# asp.net ajax updatepanel repeater


【解决方案1】:

我已经完成了下面的代码并将测试值更新为标签

ASPX:

<%@ Page Language="C#" AutoEventWireup="true"  EnableEventValidation="false" CodeBehind="Test.aspx.cs" Inherits="WebApplication1.Test" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

            <asp:Repeater ID="Posts" runat="server" OnItemCreated="Posts_OnItemCreated">
                <ItemTemplate>
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                            <asp:Label ID="lblComentarios" runat="server" Text='<%# Eval("LabelComentarios") %>'></asp:Label>
                              <asp:Label ID="Label1" runat="server" Text='<%# Eval("LabelComentarios") %>'></asp:Label>
                        </ContentTemplate>
                        <Triggers>
                            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
                        </Triggers>
                    </asp:UpdatePanel>

                    <asp:TextBox ID="txtComentario" runat="server" CssClass='<%# Eval("PostId") %>'></asp:TextBox>

                    <asp:Button ID="Button1" ClientIDMode="Static" runat="server" OnCommand="btnComentar_OnCommand" CommandName='<%# Eval("PostId") %>' class='<%# Eval("PostId") %>' />

                </ItemTemplate>
            </asp:Repeater>
        </div>
    </form>
</body>
</html>

代码背后:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class Test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("LabelComentarios");
                dt.Columns.Add("PostId");
                dt.Rows.Add("esresrer");
                dt.Rows.Add("esresrer");
                dt.Rows.Add("esresrer");


                Posts.DataSource = dt;
                Posts.DataBind();
            }
        }
        protected void Posts_OnItemCreated(object sender, RepeaterItemEventArgs e)
        {
            var control = e.Item.FindControl("Button1");
            ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(control);
        }
        protected void btnComentar_OnCommand(object sender, CommandEventArgs e)
        {
            //MyCode();
            foreach (RepeaterItem item in Posts.Items)
            {


                var lbl = (Label)item.FindControl("Label1");
                lbl.Text = "testest";
                var panel = (UpdatePanel)item.FindControl("UpdatePanel1");
                panel.Update();
            }
        }
    }
}

还要检查 !IsPostback 是否正确

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多