我只是想通过制作一个简短的原型来测试UpdatePanel功能以在链接按钮单击时禁用ASP.NET页面重新加载来缩短this question's example。我在像this这样的问题中看到了这种方法。为了测试这个,我创建了一个新的ASP.NET WebForms应用程序,添加了一个由UpdatePanel包围的ASP LinkButton。我在Visual Studio .cs文件中的OnClick和PageLoad事件上添加了断点。这是ASP文件中的代码:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:LinkButton ID="LinkButton1" OnClick="OnLinkClick" runat="server">Click me, no reload, I promise!</asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
.cs文件代码:
protected void Page_Load(object sender, EventArgs e)
{
//page reload things...
}
protected void OnLinkClick(object sender, EventArgs e)
{
//on click thigs...
}
每次点击LinkButton时,会触发第一个断点是PageLoad,然后是OnClick。我认为使用UpdatePanel将避免此行为。
我做错了什么,或者为什么我不期望不要调用PageLoad?这是测试LinkButton点击是否重新加载页面的好方法吗?
答案 0 :(得分:1)
即使您正在进行部分回发,框架仍会执行包含Page_Load的页面生命周期。但是,您只能在浏览器中对更新面板内的控件进行更改。
正如techspider所提到的,你需要指定一个回发触发器。所以你的例子应该是这样的。
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:LinkButton ID="LinkButton1" OnClick="OnLinkClick" runat="server">Click me, no reload, I promise!</asp:LinkButton>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
答案 1 :(得分:1)
如Clint B所述,代码隐藏中回发事件的处理是正常的。您可以使用两个标签测试UpdatePanel,一个在UpdatePanel内部,另一个在UpdatePanel之外:
<asp:Label ID="lbl1" runat="server" Text="Label 1" BackColor="Aqua" />
<asp:UpdatePanel ID="up1" runat="server">
<ContentTemplate>
<asp:Label ID="lbl2" runat="server" Text="Label 2" BackColor="Yellow" />
<asp:LinkButton ID="LinkButton1" runat="server" Text="Update, no reload!" OnClick="OnLinkClick" />
</ContentTemplate>
</asp:UpdatePanel>
LinkButton的事件处理程序更新两个标签:
protected void OnLinkClick(object sender, EventArgs e)
{
lbl1.Text = DateTime.Now.ToString();
lbl2.Text = DateTime.Now.ToString();
}
如果部分刷新有效,则对lbl2
所做的更改会在页面中显示,而lbl1
仍会显示其原始文字。
答案 2 :(得分:1)
我发现当我在更新面板中使用LinkButton时,页面正在进行回发(页面在浏览器中完全刷新)除非我指示 ID 和 LinkButton控件上的ClientIDMode =“AutoID”。