【发布时间】: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' 的控件。说明
-
尝试将这个
<asp:Button ID="MyButton" Text="Click Me" runat="server" onClick="MyButton_Clicked" />放在<ItemTemplate>内的标签下,然后关闭它</ItemTemplate>- 所以它应该是 然后是 itemtemplate 然后是按钮。 -
项目模板???这不能放在 contentTemplate 中。你确定你知道asp.net吗?这里不是 WPF... ;-)
-
大声笑,你说得对,我不在我的工作站上,所以我认为是这样的对不起:) 我发布了一个答案。