【问题标题】:Asp .Net update panel not updatingAsp .Net 更新面板未更新
【发布时间】:2013-06-29 18:07:56
【问题描述】:

我有 2 个页面,每个页面都有一个更新面板。它在两个页面上具有相同的内容和相同的触发器。

看起来是这样的:

                     <div id="rating">
                    <span class="rateTxt">Rate</span>
                    <telerik:RadRating ID="RadRating1" runat="server" ItemCount="5" SelectionMode="Continuous"
                        Precision="Item" Skin="Default" OnRate="RadRating1_Rate" AutoPostBack="true">
                    </telerik:RadRating>
                 </div>
            </li>
         </ul>
            <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                <ContentTemplate>
                    <div id="divAddMessage" runat="server" visible="false">
                        <span class="rateTxt">Do you want to add a comment?</span>
                        <asp:TextBox runat="server" ID="txtComment" TextMode="MultiLine" Rows="3" Width="195">
                        </asp:TextBox>
                        <br />
                        <br />
                        <asp:ImageButton runat="server" ID="lnkAddComment" ImageUrl="~/App_Themes/123reg/Images/submit-rating.png"
                            OnClick="lnkAddComment_Click" OnClientClick="showSuccessMessage();" />
                        <br />
                        <br />
                    </div>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="RadRating1" EventName="Rate" />
                </Triggers>
            </asp:UpdatePanel>

现在,当用户使用 RadRating 对某些内容进行评分时,会触发 Rate 事件,从而导致回发。

在 Rate 事件的处理程序上,我执行以下操作:

    protected void RadRating1_Rate(object sender, EventArgs e)
    {
        divAddMessage.Visible = true;
    }

相同的代码正好在 2 页上。在一个页面上,它会更新 divAddMessage 并且它变得可见,但在另一页面上它不会变得可见。即使我在再次回发时将其设置为在该页面上可见,即使在上述处理程序中将其设置为 true 后,Visible 属性仍然为 false。

我只在 aspx 文件中将 visibily 设置为 false,在上面的处理程序中我将其设置为 true。

原来我在 javascript 控制台中收到错误:

Sys.InvalidOperationException: Sys.InvalidOperationException: Could not find UpdatePanel with ID 'ctl00_mainContentPlaceHolder_updatePanel'. If it is being updated dynamically then it must be inside another UpdatePanel.

我在多视图中有另一个更新面板。但是由于活动视图不是回发更新面板的视图,因此不会呈现更新面板。

【问题讨论】:

    标签: c# asp.net asp.net-ajax


    【解决方案1】:

    我有一个自定义控件,并在 aspx 文件中声明时将 Visible 属性设置为 false,这会覆盖控件本身内任何子元素的可见性。

    【讨论】:

      【解决方案2】:

      检查divAddMessage 的父/容器元素。他们是否将其可见性设置为 false。如果是这样,则子元素将始终为Visible=false,即使您已将其显式设置为 true。过去这让我很生气。

      只是一个想法

      【讨论】:

      • 我检查了控件的所有父级都将属性设置为 true。
      • 我也在页面中动态添加了一些控件。这会造成麻烦吗?
      • 可以的。除非您在 Page_Init 上添加它们,否则它们将不会被添加到 ViewState 中,并且不会像您期望的那样保持状态,或者可能根本不存在。动态控制确实会导致问题
      猜你喜欢
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多