【问题标题】:can not access control inside asp.net updatepanel无法访问asp.net updatepanel中的控制
【发布时间】:2012-10-04 15:30:22
【问题描述】:

我使用的是 Microsoft 的官方示例:

当我尝试在点击事件中从代码隐藏访问 MyLabel 时,MyLabel 为 NULL。

为什么会这样?

<asp:ScriptManager ID="PageScriptManager" runat="server" />
<asp:Button ID="MyButton" Text="Click Me" runat="server" onClick="MyButton_Clicked" />
<asp:UpdatePanel ID="MyUpdatePanel" runat="server">
<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="MyButton" EventName="Click" />
</Triggers>
    <ContentTemplate>
    <asp:Label ID="MyLabel" Text="OldText" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>




private void MyButton_Clicked(object sender, EventArgs e) 
 {   
  MyLabel.Text = "NewText!";
 } 

UPDATE 此代码不起作用为什么? MyLabel 在服务器端始终为 NULL ??

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

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

 <asp:ImageButton OnClick="OnClickRefreshButton" ID="RefreshImageButton" runat="server" Width="100px" />
<asp:UpdatePanel ID="MyUpdatePanel" runat="server"> 
    <Triggers>
         <asp:AsyncPostBackTrigger ControlID="RefreshImageButton" EventName="Click" /> 
    </Triggers> 
    <asp:ContentTemplate> 
      <asp:Label ID="MyLabel" Text="OldText" runat="server" />
    </asp:ContentTemplate>
</asp:UpdatePanel>  
</asp:Content>

protected void OnClickRefreshButton(Object sender, ImageClickEventArgs e) 
        {       

            MyLabel.Text = "NewText!";
        }

【问题讨论】:

  • 您好,尝试将按钮和标签放在更新面板的“内部”。
  • 该按钮已在更新面板中。当我把按钮放在那里时,我得到了这个异常:在 UpdatePanel 'MyUpdatePanel' 中找不到触发器的 ID 为 'RefreshImageButton' 的控件。说明
  • 尝试将这个&lt;asp:Button ID="MyButton" Text="Click Me" runat="server" onClick="MyButton_Clicked" /&gt; 放在&lt;ItemTemplate&gt; 内的标签下,然后关闭它&lt;/ItemTemplate&gt; - 所以它应该是 然后是 itemtemplate 然后是按钮。
  • 项目模板???这不能放在 contentTemplate 中。你确定你知道asp.net吗?这里不是 WPF... ;-)
  • 大声笑,你说得对,我不在我的工作站上,所以我认为是这样的对不起:) 我发布了一个答案。

标签: c# asp.net


【解决方案1】:

尝试将函数更改为protected 而不是private,它对我有用。希望它能解决你的问题

【讨论】:

  • 是的,这个解决方案是正确的,因为我们需要将访问说明符指定为受保护
  • @TheNewOne 它不起作用,请参阅上面我更新的问题。
  • 也许这将有助于您更新问题stackoverflow.com/questions/534438/…
【解决方案2】:

您可以将UpdateMode="Conditional" 调整为您的Updatepanel

链接:http://msdn.microsoft.com/fr-fr/library/system.web.ui.updatepanel.updatemode.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2023-03-14
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多