【问题标题】:UpdatePanel not working inside Parent GridView ItemTemplateUpdatePanel 在父 GridView ItemTemplate 中不起作用
【发布时间】:2014-04-18 12:58:12
【问题描述】:

感谢观看。

背景 - 我们的项目中有一个 Share Point 2013 Visual Web Part。它有 4 个嵌套的 GridView。单击一个图像按钮 3 个网格将展开。单击该图像按钮也会对人口进行编码。但是,由于有后退发生,页面正在闪烁,所有网格都在缩小。因此,我决定在 2nd Grids 的项目模板中的这些网格之上保留一个更新面板。

问题 - 将它放在那里后,我可以停止页面闪烁。点击上述图片按钮,不再回帖。但是,没有显示网格。一点也不。我通过评论更新面板检查了我是否正在获取数据。是的,我正在获取数据。它正在显示。但是,一旦打开更新面板,网格就不再显示了。

我的 ASPX -

<asp:gridview runat="server" id="gvParent" width="98%" bordercolor="#00ABA4"
                        horizontalalign="Center" borderstyle="Solid" rowstyle-horizontalalign="Center"
                        selectedrowstyle-verticalalign="Middle"
                        autogeneratecolumns="False" datakeynames="Staff ID" emptydatatext="No Record Found!"
                        borderwidth="1px" allowpaging="True" pagesize="5" OnRowDataBound="gvParent_RowDataBound" OnRowCreated="gvParent_RowCreated" >

                        <Columns>
                            <asp:TemplateField>
                                         <ItemTemplate>
                                           <img alt="" style="cursor: pointer" src="../../_layouts/15/images/eTRAMS_img/plus.gif" />
                                              <asp:Panel ID="PnlClassification" runat="server" Style="display: none">

                                                         <asp:GridView ID="gvClassification" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" Width="100%" 
                                                     HeaderStyle-HorizontalAlign="Left">
                                                     <Columns>
                                                        <asp:TemplateField HeaderStyle-HorizontalAlign="Left">
                                                             <ItemTemplate>
                                                                  <asp:ImageButton ID="ImgClassification" runat="server" ImageUrl="../../_layouts/15/images/eTRAMS_img/plus.gif"
                                                                      CommandArgument='<%# Eval("HistoryClassification") %>'></asp:ImageButton>

                                                                 <%--child Gridview--%>
                                                                 <asp:UpdatePanel ID="UpdatePanel1" ChildrenAsTriggers="false" runat="server" UpdateMode="Always">
                                                                            <ContentTemplate>
                                                                    <asp:Panel ID="pnlCurrent" runat="server" Style="display:none;">

                                                                                 <asp:GridView ID="gvCurrent" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" Width="100%"
                                                                        HeaderStyle-HorizontalAlign="Left" DataKeyNames="TrainingName">
                                                                        <Columns>
                                                                            <asp:TemplateField HeaderText="No.">
                                                                                <ItemTemplate>
                                                                                    <asp:Label ID="Label1" runat="server"></asp:Label>
                                                                                </ItemTemplate>
                                                                            </asp:TemplateField>
                                                                            <asp:BoundField DataField="TrainingName" HeaderText="Training Title" />
                                                                            <asp:BoundField DataField="LastTrainingAttendedFrom" HeaderText="Attended Date From" />
                                                                            <asp:BoundField DataField="LastTrainingAttendedTo" HeaderText="Attended Date To" />
                                                                            <asp:BoundField DataField="Refresher" HeaderText="Remark" />
                                                                        </Columns>
                                                               </asp:GridView>                                                                               
                                                                    </asp:Panel>


                                                                    <asp:Panel ID="PnlOthers" runat="server" Style="display:none;">

                                                                                <asp:GridView ID="gvOthers" runat="server" AutoGenerateColumns="false" 
                                                                                    CssClass="ChildGrid" Width="100%" HeaderStyle-HorizontalAlign="Left" 
                                                                                    DataKeyNames="TrainingName">
                                                                        <Columns>
                                                                            <asp:TemplateField HeaderText="No.">
                                                                                <ItemTemplate>
                                                                                    <asp:Label ID="Label2" runat="server"></asp:Label>
                                                                                </ItemTemplate>
                                                                            </asp:TemplateField>
                                                                            <asp:BoundField DataField="TrainingName" HeaderText="Training Title" />
                                                                            <asp:BoundField DataField="LastTrainingAttendedFrom" HeaderText="Attended Date From" />
                                                                            <asp:BoundField DataField="LastTrainingAttendedTo" HeaderText="Attended Date To" />
                                                                        </Columns>
                                                               </asp:GridView>
                                                                        </asp:Panel>
                                                                            </ContentTemplate>
                                                                            <Triggers>
                                                                                <%--<asp:AsyncPostBackTrigger ControlID="ImgClassification" EventName="Click" />--%>
                                                                            </Triggers>
                                                                            </asp:UpdatePanel>


                                                                 <asp:Label ID="lblClassification" runat="server" Text='<%# Eval("HistoryClassification") %>' CommandName="Select"></asp:Label>

                                                             </ItemTemplate>
                                                         </asp:TemplateField>
                                                    </Columns>
                                                 </asp:GridView>                                                        
                                             </asp:Panel>
                                         </ItemTemplate>
                                         <ItemStyle Width="20px" />
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="No.">
                                <ItemTemplate>
                                    <asp:Label ID="Label4" runat="server"></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField DataField="Staff Name" HeaderText="Staff Name" />
                            <asp:BoundField DataField="Staff ID" HeaderText="Staff Number" />
                            <asp:BoundField DataField="Position Code" HeaderText="Position Code" />
                            <asp:BoundField DataField="Position Title" HeaderText="Position Name" />
                            <asp:BoundField DataField="Division" HeaderText="Division" />
                            <asp:BoundField DataField="Department" HeaderText="Department" />
                            <asp:BoundField DataField="Section" HeaderText="Section" />


                        </Columns>

                    </asp:gridview>

代码隐藏 -

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        InitializeControl();
        ScriptManager.GetCurrent(this.Page).RegisterAsyncPostBackControl(gvParent);
    }

private void ImgClassification_Click(object sender, ImageClickEventArgs e) { ImageButton ImgClassification = (发送者为 ImageButton); GridViewRow row = (ImgClassification.NamingContainer as GridViewRow); if (ImgClassification.CommandArgument == "当前") { row.FindControl("pnlCurrent").Visible = true; ImgClassification.ImageUrl = "../../_layouts/15/images/eTRAMS_img/minus.jpg"; GridView gvCurrent = row.FindControl("gvCurrent") as GridView; 字符串 strPast = ImgClassification.CommandArgument; getCurrentHistory(strPast, gvCurrent);

            UpdatePanel updtPnlPast = row.FindControl("UpdatePanel1") as UpdatePanel;
            updtPnlPast.Update();
        }

        if(ImgClassification.CommandArgument == "Past")
        {
            row.FindControl("PnlOthers").Visible = true;
            ImgClassification.ImageUrl = "../../_layouts/15/images/eTRAMS_img/minus.jpg";
            GridView gvOthers = row.FindControl("gvOthers") as GridView;
            string strPast = ImgClassification.CommandArgument;
            getJoinQuery(strPast, gvOthers);

            UpdatePanel updtPnlPast = row.FindControl("UpdatePanel1") as UpdatePanel;
            updtPnlPast.Update();
        }

        if (ImgClassification.CommandArgument == "Others")
        {
            row.FindControl("PnlOthers").Visible = true;
            ImgClassification.ImageUrl = "../../_layouts/15/images/eTRAMS_img/minus.jpg";
            GridView gvOthers = row.FindControl("gvOthers") as GridView;
            string strPast = ImgClassification.CommandArgument;
            getJoinQuery(strPast, gvOthers);

            UpdatePanel updtPnlPast = row.FindControl("UpdatePanel1") as UpdatePanel;
            updtPnlPast.Update();

        }
    }

我已经尝试了尽可能多的东西,但没有任何成果。你能弄清楚我在这里缺少什么吗?这是停止显示网格。

【问题讨论】:

  • 在 SharePoint 之外(在纯 ASP.NET 环境中)或仅在 SharePoint 中的行为相同?
  • 这是一个可视 Web 部件,因此仅在 SharePoint 中。我还没有尝试过 ASP.Net
  • 我想,你应该试试。如果在纯 asp.net 环境中出现相同的错误 - 它不是特定于 SharePoint 的。 Google 在模板字段中有一些关于 updatepanel 的主题。
  • 现在我也在 ASP.Net 中完成了,同样的问题。我确实提到了与此相关的谷歌线程。我实施了其他人所做的任何事情来解决。但同样的问题存在
  • 如果没有任何帮助,也许最好使用纯客户端网格?在 SharePoint 2013 客户端技术中相当有效。

标签: javascript asp.net ajax sharepoint updatepanel


【解决方案1】:

最后我发现有一定的复杂性限制,可以由 UpDatePanel 处理,不能超出。对于我的场景,它是非常嵌套的问题,所以我无法实现它。最后我转向 JQuery 方法来实现我的目标,这对我来说非常好。

感谢大家的支持和建议。

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多