我有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并且它变得可见但在另一个页面上它不会变得可见。即使我在该页面上将其设置为可见,当它再次回发时,即使在上述处理程序中将Visible属性设置为true,它仍然是假的。
我只在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.
我在多视图中有另一个更新面板。但由于活动视图不是回发更新面板的视图,因此不会呈现更新面板。
答案 0 :(得分:3)
检查divAddMessage
的父/容器元素。他们的可见性设置为假。如果是这样,那么即使您将其明确设置为true,子元素也始终为Visible=false
。这让我在过去很生气。
只是一个想法
答案 1 :(得分:0)
我有一个自定义控件,并且在aspx文件中声明时将Visible属性设置为false,这会覆盖控件本身中任何子元素的可见性。